2010-07-09 3 views
2

Я знаю, что с помощью VIM я могу отформатировать C++ код только с помощьюФормат кода с использованием VIM внешних команд

gg=G 

Теперь я должен форматировать 30 файлов, так что делать это вручную становится утомительно. Я посмотрел, как это сделать, передавая внешние команды VIM, поэтому я попробовал

vim -c gg=G -c wq file.cpp 

но это не работает.

Не могли бы вы дать мне подсказку?

Благодаря

ответ

8

Почему бы не загрузить все файлы в буфер и использовать bufdo, чтобы выполнить команду на всех из них в свое время?

:bufdo "execute normal gg=G" 
+0

как вы можете загрузить все файлы в буферах? используя цикл «for» в сценарии bash? спасибо – flow

+1

Нет необходимости в скрипте, если ваша оболочка поддерживает флеширование файлов. Например, если бы я хотел загрузить все рубиновые файлы в каталог '~/mycode', я бы напечатал' $ vim ~/mycode/*. Rb' – michaelmichael

+0

отлично! Я добился их редактирования. Теперь, как я могу их сохранить? Я попытался: bufdo «выполнить нормальный wq», но он не работает – flow

5

-c gg=G Изменение к -c 'normal! gg=G'. -c переключатель принимает только команды ex mode, gg=G - это две команды нормального режима.

1

Я предпочитаю небольшое изменение в ответе :bufdo. Я предпочитаю список arg вместо списка буферов, поэтому мне не нужно беспокоиться о закрытии текущих буферов или открытии новой сессии vim. Например:

:args ~/src/myproject/**/*.cpp | argdo execute "normal gg=G" | update 
  • args устанавливает список аргументов, с использованием шаблонов (** будет соответствовать текущему каталогу, а также подкаталоги)
  • | позволяет нам запускать несколько команд в одной строке
  • argdo выполняет следующий команды на каждом arg (он поглотит второй |)
  • execute предотвращает прохождение normal от проглатывания следующей трубы ,
  • normal выполняет следующие обычные команды режима (то, что вы работали с в первую очередь)
  • update, как :w, но сохраняет только тогда, когда буфер изменяется.

Это :args ... | argdo ... | update картина очень полезна для любого рода манипуляции широко файла проекта (например, поиск и замена через «% с/Foo/бар/ге» или установка равномерной fileformat или fileencoding).