No meu .vimrc
eu estou tentando usar ftplugin
e, obviamente, usar alguns comandos relacionados a isso sob a suposição de que ele foi carregado com sucesso. No entanto, agora encontrei algumas máquinas antigas que não têm o plug-in instalado. De alguma forma, posso tornar o carregamento desse plug-in condicional e adicionar filetype on
diretivas semelhantes no mesmo bloco condicional?
Vi que existem condições para esquemas de cores e a versão Vim, mas não vi um exemplo que verifique o plug-in (ou não o reconheça).
NB: Seja gentil, eu sou iniciante em VimScript.
~/.vimrc
, portanto, você não poderá testar os efeitos de um plug-in dentro dele, a~/.vimrc
menos que teste a existência do arquivo do plug-in ou adie o teste até que os plug-ins tenham sido carregados com um comando automático, como VimEnter.Respostas:
Você pode agrupar esse bloco em uma condição que usa a
exists()
função para verificar se uma variável, comando ou função definida pelo plug-in é conhecida pelo vim.Aqui estão alguns bits que eu tenho nos arquivos em ~ / .vim:
Observe que os bits acima estão em arquivos que são avaliados após plugins normais, aqui um ftplugin e um arquivo no
after/plugin
diretórioOutra opção seria usar blocos try / catch, embora isso exija pelo menos o vim 7.0:
Uma vez que algo na
try
seção desse bloco falhar, ele pulará para acatch
seção. Como acatch
seção está vazia, ela continuará com o restante do arquivo de inicialização após aendtry
instrução.Como isso está carregando o código manualmente, em vez de depender de um plug-in já carregado, isso pode ser feito no próprio arquivo .vimrc.
fonte
try
construção? O velho Vim entenderia isso? Ou seja, quando foi introduzido. Obrigado e +1 por enquanto.try
deve funcionar. Muito obrigado. Vamos ver se outra resposta ainda chegará. Caso contrário, é claro que vou aceitar o seu.:silent! {cmd}
, que suprime o erro quando{cmd}
não existe. Isso funciona mesmo no Vim 6.Meu método preferido é apenas verificar a existência do arquivo de plug-in. Eu acho isso mais simples.
fonte
Eu queria conseguir isso enquanto mantinha minha configuração do Vim em conjunto
.vimrc
, em vez de em váriosafter/
diretórios. Esta é a solução que eu vim com:Verifique a existência de cada plug-in, verificando qualquer comando único que ele fornece
exists()
e defina suas opções, se existir. (Isso é exatamente como na resposta aceita.)Coloque todas as opções definidas da maneira acima em uma função (chamada
SetPluginOptionsNow()
no meu código).Chame essa função no
VimEnter
evento, que é acionado ao entrar em uma nova sessão do Vim - mas crucialmente, depois que todos os plugins foram carregados. Por esse motivo, nossasexists()
verificações podem verificar as funções do plug-in sem problemas.Aqui está uma amostra dessa parte da minha
.vimrc
.fonte
airline_theme
parece induzir vários erros ... Não sei ao certo por quê.Ainda existe outra alternativa
:silent! {cmd}
, que suprime o erro quando{cmd}
não existe. O principal benefício é que é um pequeno comando único. Isso funciona mesmo no Vim 6 e é ótimo para coisas opcionais.Por exemplo, é usado por plugins que usam repeat.vim de Tim Pope para tornar os mapeamentos repetíveis.
fonte
!silent runtime ftplugin/man.vim | filetype on | filetype plugin on | filetype indent on
trabalhar para desligar todos os comandos após o!silent
ou é sempre específico para o próximo comando?:silent!
,!silent
e se aplica a todos os comandos contidos, exceto quando:unsilent
é usado em algum lugar interno. (Mas isso é raro.)Inicialmente publicado em outra pergunta: /programming//a/48178537/2843583
Apenas como alternativa, você também pode usar um regexp para decidir se o plugin disponível está no seu
runtimepath
:Isso tem a vantagem de funcionar com plug-ins que possuem apenas código vimscript no
autoload
diretório, que por sua vez não pode ser detectado quando o .vimrc é analisado inicialmente, pois os snippets de carregamento automático são carregados no momento de uma chamada de função.fonte