Come eseguire il comando Vim dalla shell?


12

Questa potrebbe essere una domanda stupida, ma abbi pazienza.

Sto automatizzando alcune delle solite cose che faccio quando installo un nuovo ambiente di lavoro e vorrei automatizzare il comando Vim :BundleInstall(per l'installazione di tutti i miei plugin Vim).

È possibile eseguirlo dalla shell?

In alternativa, è possibile far eseguire lo script Vim, eseguirlo :BundleInstall, attendere fino al termine ed uscire?

Grazie.

Risposte:


14

Dalla vim(1)pagina man:

+ {Comando}

-c {comando}

{command} verrà eseguito dopo la lettura del primo file. {comando} viene interpretato come un comando Ex. Se il {comando} contiene spazi, deve essere racchiuso tra virgolette doppie (questo dipende dalla shell utilizzata). Esempio: Vim "+ set si" main.c

Nota: è possibile utilizzare fino a 10 comandi "+" o "-c".


3
Grazie! Sapevo che mi sarei sentito stupido ...: - / Mi fa bene per non aver letto a fondo la manpage. Ho finito per usare vim +BundleInstall +qall!.
imiric,

4

È possibile eseguire il comando in questo modo:

vim -E -c BundleInstall -c q

che eviterà di aprire una finestra di Vim nel tuo terminale.

Nota: la mia prima risposta includeva l' -sopzione di cui avevo bisogno per un'altra applicazione, ma qui non era corretta perché impediva gran parte dell'intializzazione di Vim, incluso l'approvvigionamento del plugin che definiva il BundleInstallcomando.


1
Grazie, ma per qualche motivo non funzionerà per me.
imiric,

1
Ora capisco perché. Ho dimenticato che -sfa più che inibire determinati messaggi - inibisce anche le inizializzazioni - quindi la definizione di BundleInstall non è stata ottenuta. Un modo per correzione che potrebbe essere quella di aggiungere un'opzione simile prima del primo -c: --cmd 'runtime plugin/bundle.vim'. Modifica il nome del file per adattarlo. Vedere :help -s-ex.
garyjohn,

2

Mentre la ricetta specifica di vim sopra è il modo giusto per farlo, puoi sempre usare un approccio più generale come autoexpect .


0

Per le situazioni in cui è necessario che Vim sia stato caricato completamente come se fosse stato avviato manualmente, funziona:

vim -c "autocmd! CursorHold * <commands to run>"

Ad esempio, volevo reindirizzare l'output di :mapun file dalla shell, ma volevo catturare la mappatura creata da vim-compagnia aerea solo dopo che è stata visualizzata la sua scheda (riga in alto che mostra tutti i nomi di buffer aperti). Perché sembra fare questo in modo asincrono, semplicemente eseguire un -creindirizzamento su un file non gli dava il tempo di fare i mapping. Potrebbe esserci un modo migliore, ma questo funziona per me, soprattutto perché ho già updatetimeimpostato 100(0,1 secondi), il che influisce sul tempo necessario CursorHoldall'evento. Per impostazione predefinita, vim lo imposta su 4 secondi.

vim -c "autocmd! CursorHold * set nomore | redir! > mapNew | map | redir END | q"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.