2012-10-11 10 views
42

Ci sono molte domande di SO sull'esecuzione di programmi shell da vim. Quello che mi chiedo è se è possibile fare il contrario - cioèEsegui comando vim da riga di comando

$ vim :BundleInstall 

per esempio, per permettermi di correre BundleInstall come parte di uno script, invece di dover aprire Vim ed eseguirlo manualmente sulla prima in esecuzione? È possibile?

risposta

73

nota, ora la sintassi è cambiato, e la linea dovrebbe leggere (come da @sheharyar):

vim +PluginInstall +qall 

Ai posteri, in precedenza, la linea corretta era:

vim +BundleInstall +qall 

Se qualcuno altro di quanto io stia guardando! Nota: questo è nel Github README per Vundle.

+0

Questo è direttamente dal README vundle qui: https://github.com/gmarik/vundle – Conner

+1

Sì - ho scoperto che dopo averlo fatto funziona sulla base della manpage – jvc26

+0

Incredibilmente intuitiva. Adoro come non dobbiamo più neanche "man vim" e scorrere due pagine grazie a SO. – peth

0

Does

vim --cmd BundleInstall 

fare quello che vuoi?

+0

È necessario eseguire il comando dopo aver caricato il plug-in. usa l'opzione '-c' – kev

20

Penso che questo è quello che vi serve:

Si dovrebbe controllare vim uomo pagina:

-c {command} 
    {command} will be executed after the first file has been 
    read. {command} is interpreted as an Ex command. If the 
    {command} contains spaces it must be enclosed in double 
    quotes (this depends on the shell that is used). Example: 
    Vim "+set si" main.c 
    Note: You can use up to 10 "+" or "-c" commands. 

o:

--cmd {command} 
    Like using "-c", but the command is executed just before 
    processing any vimrc file. You can use up to 10 of these 
    commands, independently from "-c" commands. 

Dipende davvero da cosa vuoi fare. Inoltre, come descritto nel file readme vundle, se si avvia vim in questo modo:

vim +BundleInstall +qall 

Questo installerà tutte le opzioni di bundle senza aprire vim. E solo per un chiarimento, dal vim documentation:

:qall 

    This stands for "quit all". If any of the windows contain changes, Vim will 
    not exit. The cursor will automatically be positioned in a window with 
    changes. You can then either use ":write" to save the changes, or ":quit!" to 
    throw them away. 

Speranza che aiuta!

2

Aggiungerò un'altra risposta per le persone che cercano una soluzione più generale.

vim +command funziona per eseguire un comando Vim ma per eseguire diversi comandi Vim da una shell. Invece, avviare Vim in modalità Ex e fornire comandi con un documento Here. Questo è un esempio tratto da una sceneggiatura che ho scritto. Cerca un pattern nel file e inserisce del testo prima di esso.

ex --noplugin +1 "$v_file" <<-END 
      set maxmempattern=8000 
      /^\s*\<endmodule\>/i 

      FIXME \`ifdef XXX_INCLUDE_API 
       \`include "${api_file}" 
      \`endif 

      . 
      w 
      q 
    END 
2

Che ne dici di qualcosa di più complesso?

vim "+set ff=unix" "+wq" node_modules/less-monitor/bin/less-monitor 

Non sono sicuro che sia del tutto corretto, ma funziona per me. Grazie @ jvc26

+0

Non riesco a capire se questa è una nuova domanda (che dovrebbe quindi essere richiesta separatamente) o una nuova risposta. –

+0

È solo un esempio di come utilizzare la soluzione con comandi di più parole come '+ set ff = unix' e con' + wq' invece di '+ qall'. Nel mio caso ho bisogno di aggiornare il file. Ho postato questo come risposta solo perché non riesco a postare un commento (50+ necessaria reputazione) – graceman9

+0

* cancro guarito * grazie ... –