Conosco il comando :bufdo
e stavo cercando di combinarlo con una macro che avevo registrato (@a
) per aggiungere un #include nel punto corretto di ciascun file di intestazione I ' d caricato. Tuttavia, non ho trovato un modo semplice per eseguire la macro su ciascun buffer. C'è un modo per eseguire una macro attraverso la modalità ex, che è ciò che richiede :bufdo
? O c'è un altro comando che mi manca?Esegui una macro in tutti i buffer in vim
risposta
si può fare in questo modo:
:bufdo execute "normal @a" | write
Il comando normale eseguirà la macro, ma deve essere eseguito utilizzando: execute, altrimenti il carattere pipe sarà interpretato come un carattere in modalità normale.
L'unica alternativa che potevo ottenere era quella di aggiungere i comandi :w
e :bn
alla macro, in modo che si salvasse automaticamente e passasse al buffer successivo. Potrei quindi eseguire il comando sugli altri 52 buffer digitando [email protected]
. Questo ha funzionato, ma per me è un modello concettuale molto diverso rispetto allo :bufdo
e spero che qualcun altro mi indicherà qualcosa di più simile a :bufdo
.
bisogna usare normal
per eseguire i comandi modalità normale, l'esecuzione di tale macro (@a
) in modalità comandi:
:bufdo normal @a
Funziona solo se è abilitato 'autowrite', altrimenti si fermerà con un errore quando tenta di passare al secondo buffer, poiché abbandonerà un buffer modificato. –
@DaveKirby farebbe questo se includessimo: w nella nostra macro? – MeanEYE
@MeanEYE: Sì, se si termina la macro con ': w', questo funziona. –
un'occhiata a http://stackoverflow.com/questions/1291962/replay-a-vim-macro-until-end-of-buffer EDIT: non importa questo – gruntled
@gruntled: Grazie per il link. L'ho saltato perché la domanda non sembrava applicarsi, ma le tecniche dovrebbero funzionare. Ho votato per chiudere questo. –