Como executo “ctags -R” ao salvar arquivos * .he * .cpp sem um prompt de confirmação?


8

Esta é uma pergunta noob, então basicamente no vim eu quero executar ctags -Rquando estiver escrevendo nos meus arquivos de origem ou de cabeçalho ( *.hou *.cpp), então tentei o seguinte:

autocmd BufWritePost *.cpp :!ctags -R
autocmd BufWritePost *.h :!ctags -R

Parece funcionar, mas toda vez que eu salvo, quero uma confirmação, então eu tenho que pressionar enter, assim:

"coap/coap_pdu_ll.h" 30L, 793C written
:!ctags R

Press ENTER or type command to continue

Existe uma maneira de se livrar da confirmação?

Respostas:


10

Quando você executa um comando externo :!, o Vim não sabe o que o comando externo pode ter gravado no terminal, portanto, você espera que você confirme que está pronto para continuar.

Para evitar isso, você pode usar a system()função assim:

autocmd BufWritePost *.cpp call system("ctags -R")
autocmd BufWritePost *.h   call system("ctags -R")

Você também pode simplificar isso em um comando:

autocmd BufWritePost *.cpp,*.h call system("ctags -R")

Um problema com a chamada system()é que você perde as mensagens de erro que ela pode produzir. Isso pode ser resolvido usando em echovez de call, da seguinte maneira:

autocmd BufWritePost *.cpp,*.h echo system("ctags -R")

No entanto, isso ecoa uma linha vazia na tela quando o comando é bem-sucedido, causando outro prompt "Pressione ENTER ou digite o comando para continuar". A solução mais simples para isso é aumentar a altura da linha de comando:

:set cmdheight=2

Outra solução mais complicada seria repetir uma mensagem apenas se houver uma. Você evita o prompt sem perder espaço na tela.

autocmd BufWritePost *.cpp,*.h let msg=system('ctags -R') | if msg!="" | echo msg | endif

2

Como parece que você está usando C ++, por que não apenas reconstruir suas tags quando compila? Basta adicionar uma regra ao seu makefile.

Outras opções:


Sugestões realmente boas, na verdade eu estou tentando gutentags agora. Mas, eu sou principalmente minimalista, para mim uma linha no arquivo .vimrc é melhor que um plugin, a menos que o plugin me ofereça algo que uma linha não pode fazer. Eu acho que esse plugin é necessário para bases de código maiores.
user1135541
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.