Come eseguire "ctags -R" durante il salvataggio dei file * .h e * .cpp senza una richiesta di conferma?


8

Questa è una domanda noob, quindi sostanzialmente in vim voglio correre ctags -Rquando scrivo sui miei file sorgente o header ( *.ho *.cpp) quindi ho provato quanto segue:

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

Sembra funzionare, ma ogni volta che salvo, vuole una conferma, quindi devo premere Invio, in questo modo:

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

Press ENTER or type command to continue

C'è un modo per sbarazzarsi della conferma?

Risposte:


10

Quando esegui un comando esterno con :!, Vim non sa cosa potrebbe aver scritto il comando esterno sul terminale, quindi aspetta che tu confermi che sei pronto per continuare.

Per evitarlo, puoi usare la system()funzione in questo modo:

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

Puoi anche semplificarlo con un solo comando:

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

Un problema con la chiamata system()è che si perdono tutti i messaggi di errore che potrebbe produrre. Questo può essere risolto usando echoinvece di call, in questo modo:

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

Tuttavia, ciò fa eco a una riga vuota sul display quando il comando ha esito positivo, causando un altro prompt "Premere INVIO o digitare il comando per continuare". La soluzione più semplice è quella di aumentare l'altezza della riga di comando:

:set cmdheight=2

Un'altra soluzione più complicata sarebbe quella di fare eco a un messaggio solo se ce n'è uno. Quindi si evita il prompt senza perdere spazio sullo schermo.

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

2

Dal momento che sembra che tu stia utilizzando C ++, perché non ricostruire i tag solo durante la compilazione? Aggiungi una regola al tuo makefile.

Altre opzioni:


Davvero buoni suggerimenti, in effetti sto provando gutentags in questo momento. Ma, per lo più sono un minimalista, per me una riga nel file .vimrc è meglio di un plug-in, a meno che il plug-in non mi offra qualcosa che una riga non può fare. Penso che il plugin sia necessario per basi di codice più grandi.
user1135541
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.