Vim - como executar um comando imediatamente ao iniciar o vim?

103

Eu tenho um plugin (FindFile.vim) que precisa ser executado :FindFileCache .sempre que eu iniciar o vim para reunir um cache de arquivo para uma abertura rápida .. Porém, eu tenho que executar isso toda vez que eu iniciar o vim.

Como posso escrever um comando que é executado uma vez, toda vez que o vim é iniciado?

testador
fonte

Respostas:

145

O melhor lugar para guardar o seu material de configuração é no arquivo .vimrc . No entanto, é fornecido muito cedo, verifique :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

Como você pode ver, seu .vimrc será carregado antes dos plug-ins. Se você inserir :FindFileCache .nele, ocorrerá um erro, pois esse comando ainda não existe. (Existirá assim que o plugin for carregado na etapa 4.)

Para resolver isso, em vez de executar o comando diretamente, crie um comando automático. Os comandos automáticos executam algum comando quando ocorre um evento. Nesse caso, o evento VimEnter parece apropriado (de :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.

Então, basta colocar esta linha em seu .vimrc :

autocmd VimEnter * FindFileCache .
Sidyll
fonte
2
+1, esta deve ser a resposta aceita, é muito mais limpo do que criar um arquivo separado para um comando.
Quero acrescentar que tive essa chance comigo com E172 porque tive um espaço depois.
Caroline
tentei usar esta abordagem para chamar: AnsiEsc, mas não teve realmente o efeito desejado - alguma chance de você saber como detectar se um comando como: AnsiEsc foi executado antes?
serup
89

Também existe o sinalizador -c do vim. Eu faço isso na configuração do tmuxp para que o vim comece com uma divisão vertical:

vim -c "vnew"

Pelo menos com o neovim você também pode abrir um arquivo ao mesmo tempo:

nvim -c "colorscheme mustang" some_file
djangonauta
fonte
6
Obrigado, isso é o que eu estava procurando. Às vezes, eu só preciso executar um comando de inicialização temporário como dividir como você mostrou, e não preciso armazenar isso no meu arquivo vimrc
verboze
Não é possível abrir um arquivo:vim -c ':colo default' test.txt
van abel
1
Perfeito para mim também - estou usando xolox/vim-notese quero uma função de peixe que abra o Vim com uma nova nota pronta para usar.
wsams
13

Crie um arquivo chamado ~/.vim/after/plugin/whatever_name_you_like.vime preencha-o com

FindFileCache .

A ordem em que os scripts são lidos e executados nos diretórios vim é descrita em :help 'runtimepath'

Benoit
fonte
2

Para obter ainda mais atraso do que outras respostas, mas ainda logo após a inicialização, use um cronômetro em .vimrc. Por exemplo, este código em .vimrc espera meio segundo após a inicialização antes de definir uma variável.

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

(A variável no exemplo é a lista negra do plugin YouCompleteMe. Presumo que o plugin inicia algum outro processo de forma assíncrona que então cria variáveis, mas não está completamente pronto no momento em que o vim é iniciado. A variável não existe quando tento configure-o em .vimrc, um arquivo posterior ou evento VimEnter. Isso é específico para o meu sistema Windows de alguma forma, a documentação do YCM diz que .vimrc deve funcionar para definir opções.)

menos do que ideal
fonte
1

Coloque FindFileCacheno seu .vimrc.

Os comandos Autload são diferentes e não funcionarão em seu cenário.

Matpie
fonte
obrigado por apontar isso, na verdade, foi pluginnão autoload.
Benoit