2010-06-11 4 views
26

Я знаю о команде :bufdo и пытался объединить его с макросом, который я записал (@a), чтобы добавить #include в правильное место каждого из файлов заголовков I ' d. Однако я не мог найти простой способ запуска макроса для каждого буфера. Есть ли способ выполнить макрос через ex-режим, что требуется :bufdo? Или есть еще одна команда, которую мне не хватает?Запуск макроса во всех буферах в vim

+0

взглянуть на http://stackoverflow.com/questions/1291962/replay-a-vim-macro-until-end-of-buffer EDIT: никогда не возражает это – gruntled

+0

@gruntled: Спасибо за ссылку. Я пропустил это, потому что вопрос, похоже, не применим, но методы должны работать. Я проголосовал за закрытие этого. –

ответ

31

Вы можете сделать это следующим образом:

:bufdo execute "normal @a" | write 

Обычная команда запускает макрос, но его нужно запустить с помощью: выполнить, иначе символ канала будет интерпретироваться как символ нормального режима.

0

Единственная альтернатива, которую я мог бы придумать, заключалась в том, чтобы добавить макросы в :w и :bn, чтобы они автоматически сохраняли и перемещались в следующий буфер. Затем я мог запустить команду на других 52 буферах, набрав [email protected]. Это сработало, но для меня это совсем другая концептуальная модель, чем :bufdo, и я надеюсь, что кто-то еще укажет мне в сторону чего-то более похожего на :bufdo.

11

Вы должны использовать normal выполнить нормальный режим команд, такой макрос выполнения (@a) в режиме командной:

:bufdo normal @a 
+1

Это будет работать только в том случае, если включен параметр «autowrite», иначе он остановится с ошибкой, когда попытается перейти во второй буфер, так как он будет отказываться от модифицированного буфера. –

+0

@DaveKirby будет работать, если мы включим: w в наш макрос? – MeanEYE

+1

@MeanEYE: Да, если вы закончите свой макрос с помощью ': w', это сработает. –

Смежные вопросы