2013-07-03 19 views
6

Voglio eseguire un comando esterno nello script Vim ma non come posso farlo. Per esempio ho bisogno di cambiare un permesso di file usando il comando chmod (Supponiamo che l'applicazione abbia abbastanza autorizzazioni per eseguire il comando)Come eseguire un comando esterno nello script Vim?

Esiste un modo per raggiungere questo obiettivo?

+1

Possibile duplicato di [Come eseguire un comando shell tramite vimscript?] (Http://stackoverflow.com/questions/10766033/how-to-run-a-shell-command-through-vimscript) –

risposta

7

Se si desidera che gli utenti visualizzino l'output (o interagiscano con il comando) :! è il comando corretto. Per l'esecuzione silenziosa (come suppongo sarebbe desiderata con il tuo chmod), è preferibile utilizzare system(). Soprattutto su Windows, questo evita il popup di un prompt dei comandi che deve essere rimosso manualmente.

:call system('chmod +x ' . shellescape(fname)) 
+0

Bella soluzione. C'è un modo per ottenere l'output di call system() e mostrarlo manualmente all'utente? Ad esempio tramite il comando echo() in Vim. –

+2

Restituisce l'output e lo stato di uscita è in 'v: shell_error'. ': help system()' è tuo amico :-) –

6

È possibile utilizzare il comando :! vim. Ad esempio, per echo 'Hello, World!' dall'interno vim (e quindi da uno script vim, anche), tipo

:! echo 'Hello, World\!' 

in vim. Oppure, in uno script vim, puoi inserire solo

! echo 'Hello, World\!' 

Il motivo per cui hai bisogno di \ prima del! è perché vim esegue una gestione speciale di! personaggi nell'argomento di a! comando. Se stavi eseguendo un comando che non ne includa! personaggio, quindi non è necessario per fuggire.

Se volete leggere più in profondità su questo, è possibile digitare

:help :! 

in vim, come ha detto @FDinoff.

+0

Assicurati anche a guardare ': h:!' – FDinoff

2

mio modo preferito è quello di spingere Ctrl-z o eseguire :sus di sospendere il processo vim, allora si può fare quello che vuoi nella shell.

Al termine, eseguire fg (in primo piano) per riprendere la sessione Vim.

Maggiori informazioni possono essere trovate here.

Problemi correlati