2010-06-11 26 views
26

Sé sobre el comando :bufdo, y estaba tratando de combinarlo con una macro que había registrado (@a) para agregar un #include en el lugar correcto de cada uno de los archivos de encabezado I ' d cargado Sin embargo, no pude encontrar una manera fácil de ejecutar la macro en cada buffer. ¿Hay alguna manera de ejecutar una macro a través del modo ex, que es lo que :bufdo requiere? ¿O hay otro comando que me falta?Ejecutar una macro en todos los buffers en vim

+0

echar un vistazo a http://stackoverflow.com/questions/1291962/replay-a-vim-macro-until-end-of-buffer EDIT: no importa este – gruntled

+0

@gruntled: Gracias por el enlace. Me salté eso porque la pregunta no parecía aplicarse, pero las técnicas deberían funcionar. Yo voté para cerrar este. –

Respuesta

31

Usted puede hacerlo de esta manera:

:bufdo execute "normal @a" | write 

El comando normal ejecutará la macro, pero se debe ejecutar utilizando: execute, de lo contrario, el carácter de la tubería se interpretará como un carácter de modo normal.

0

La única alternativa que podría surgir fue agregar los comandos :w y :bn a la macro, para que se guarde automáticamente y se mueva al siguiente búfer. Podría ejecutar el comando en los otros 52 buffers escribiendo [email protected]. Esto funcionó, pero para mí es un modelo conceptual muy diferente de :bufdo, y espero que alguien más me señale en la dirección de algo más similar al :bufdo.

11

usted tiene que utilizar normal para ejecutar comandos modo normal, una ejecución como macro (@a) en modo de comando:

:bufdo normal @a 
+1

Esto solo funcionará si 'autowrite' está habilitado, de lo contrario se detendrá con un error cuando intente cambiar al segundo buffer, ya que abandonará un buffer modificado. –

+0

@DaveKirby funcionaría si incluimos: w en nuestra macro? – MeanEYE

+1

@MeanEYE: Sí, si finalizas tu macro con ': w' esto funciona. –

Cuestiones relacionadas