Vim - come eseguire un comando immediatamente all'avvio di vim?


103

Ho un plugin (FindFile.vim) che deve essere eseguito :FindFileCache . ogni volta che avvio vim per raccogliere una cache di file per un'apertura rapida .. Devo eseguirlo ogni volta che avvio vim.

Come potrei scrivere un comando che viene eseguito una volta, ogni volta che vim si avvia?

Risposte:


145

Il posto migliore per conservare le tue cose di configurazione è nel tuo file .vimrc . Tuttavia, è stato acquistato troppo presto, controlla :h startup:

At startup, Vim checks environment variables and files and sets values
accordingly.  Vim proceeds in this order:

1. Set the 'shell' and 'term' option                *SHELL* *COMSPEC* *TERM*
2. Process the arguments
3. Execute Ex commands, from environment variables and/or files *vimrc* *exrc*
4. Load the plugin scripts.                                 *load-plugins*
5. Set 'shellpipe' and 'shellredir'
6. Set 'updatecount' to zero, if "-n" command argument used
7. Set binary options
8. Perform GUI initializations
9. Read the viminfo file
10. Read the quickfix file
11. Open all windows
12. Execute startup commands

Come puoi vedere, il tuo .vimrc verrà caricato prima dei plugin. Se metti:FindFileCache . , si verificherà un errore, poiché quel comando non esiste ancora. (Esisterà una volta caricato il plug-in nel passaggio 4.)

Per risolvere questo problema, invece di eseguire direttamente il comando, crea un comando automatico. I comandi automatici eseguono alcuni comandi quando si verifica un evento. In questo caso, l' evento VimEnter sembra appropriato (da :h VimEnter):

                                                    *VimEnter*
VimEnter                    After doing all the startup stuff, including
                            loading .vimrc files, executing the "-c cmd"
                            arguments, creating all windows and loading
                            the buffers in them.

Quindi, inserisci questa riga nel tuo .vimrc :

autocmd VimEnter * FindFileCache .

2
+1, questa dovrebbe essere la risposta accettata, è molto più pulito rispetto alla creazione di un file separato per un comando.

Voglio aggiungere che ho avuto questa pausa su di me con E172 perché avevo uno spazio dopo.
Caroline

ho provato a usare questo approccio per chiamare: AnsiEsc tuttavia non ha avuto l'effetto desiderato - c'è qualche possibilità che tu sappia come rilevare se un comando come: AnsiEsc è stato eseguito prima?
serup

89

C'è anche il flag -c di vim. Lo faccio nella mia configurazione tmuxp per fare in modo che vim inizi con una divisione verticale:

vim -c "vnew"

Almeno con neovim puoi anche aprire un file contemporaneamente:

nvim -c "colorscheme mustang" some_file

6
Grazie, questo è quello che stavo cercando. A volte, ho solo bisogno di eseguire un comando di avvio temporaneo come split come hai mostrato e non è necessario memorizzarlo nel mio file vimrc
verboze

Questo non può aprire un file:vim -c ':colo default' test.txt
van abel

1
Perfetto anche per me: sto usando xolox/vim-notese voglio una funzione pesce che apra Vim con una nuova nota pronta per l'uso.
wsams

13

Crea un file denominato ~/.vim/after/plugin/whatever_name_you_like.vime riempilo con

FindFileCache .

L'ordine in cui gli script vengono letti ed eseguiti nelle directory vim è descritto in :help 'runtimepath'


2

Per ottenere anche più tardi rispetto ad altre risposte, ma comunque subito dopo l'avvio, usa un timer in .vimrc. Ad esempio, questo codice in .vimrc attende mezzo secondo dopo l'avvio prima di impostare una variabile.

function DelayedSetVariables(timer)
    let g:ycm_filetype_blacklist['ignored'] = 1
endfunction
let timer=timer_start(500,'DelayedSetVariables')

(La variabile nell'esempio è la lista nera del plug-in YouCompleteMe. Presumo che il plug-in avvii un altro processo in modo asincrono che quindi crea variabili, ma non è del tutto pronto quando vim è stato avviato. La variabile non esiste quando provo a impostalo in .vimrc, un file after o un evento VimEnter. Questo è specifico per il mio sistema Windows in qualche modo, la documentazione YCM dice che .vimrc dovrebbe funzionare per l'impostazione delle opzioni.)


1

Metti il FindFileCachetuo .vimrc.

I comandi di caricamento automatico sono diversi e non funzioneranno per il tuo scenario.


grazie per la segnalazione, in realtà era pluginnon autoload.
Benoit
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.