¿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?

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

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:


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.