Форматировать код с помощью VIM с использованием внешних команд - PullRequest
2 голосов
/ 09 июля 2010

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

gg=G

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

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

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

Можете ли вы дать мне подсказку?

Спасибо

Ответы [ 3 ]

8 голосов
/ 09 июля 2010

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

:bufdo "execute normal gg=G"
5 голосов
/ 09 июля 2010

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

1 голос
/ 15 июля 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...