¿Cómo ejecuto "ctags -R" al guardar archivos * .h y * .cpp sin un aviso de confirmación?

8

Esta es una pregunta novata, así que básicamente en vim quiero ejecutar ctags -Rcuando estoy escribiendo en mi fuente o archivos de encabezado ( *.ho *.cpp), así que probé lo siguiente:

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

Parece funcionar, pero cada vez que guardo, quiere una confirmación, así que tengo que presionar enter, así:

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

Press ENTER or type command to continue

¿Hay alguna forma de deshacerse de la confirmación?

usuario1135541
fuente

Respuestas:

10

Cuando ejecuta un comando externo con :!, Vim no sabe lo que el comando externo podría haber escrito en el terminal, por lo que espera a que confirme que está listo para continuar.

Para evitar eso, puede usar la system()función de esta manera:

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

También podría simplificar eso a un comando:

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

Un problema con las llamadas system()es que pierde cualquier mensaje de error que pueda producir. Eso se puede resolver usando en echolugar de call, así:

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

Sin embargo, eso hace eco de una línea vacía en la pantalla cuando el comando tiene éxito, provocando otro mensaje "Presione ENTRAR o escriba comando para continuar". La solución más simple para eso es aumentar la altura de la línea de comando:

:set cmdheight=2

Otra solución más complicada sería hacer eco de un mensaje solo si hay uno. Luego, evita la solicitud sin perder espacio en la pantalla.

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

Dado que parece que está utilizando C ++, ¿por qué no simplemente reconstruir sus etiquetas cuando compila? Simplemente agregue una regla a su archivo MAKE.

Otras opciones:

Peter Rincker
fuente
Muy buenas sugerencias, de hecho, estoy probando gutentags en este momento. Pero, en su mayoría soy minimalista, para mí una línea en el archivo .vimrc es mejor que un complemento, a menos que el complemento me ofrezca algo que una línea no puede hacer. Creo que ese complemento es necesario para bases de código más grandes.
user1135541