Отступ в VIM со всеми файлами в папке - PullRequest
34 голосов
/ 10 июля 2010

У меня есть папка, содержащая сотни файлов TTL (TeraTermLanguage).Теперь я хотел сделать отступ для всех этих файлов.

Я создал teraterm.vim для отступа, и я открываю файл с помощью VIM и выполняю «gg = G», и весь файл получает отступ.

Но есть ли способ, где я могу сделать отступ для всех файлов в папке.

Я хотел сделать с помощью Shell.Но в VIM я не мог передать команду отступа файла в качестве аргумента VIM.

Пожалуйста, предложите, какой лучший способ сделать отступ для всех файлов в VIM.

Ответы [ 4 ]

60 голосов
/ 15 июля 2010

Намного проще, чем создавать сценарии vim из командной строки bash, - использовать vimscript изнутри vim (или, возможно, гораздо более простой однострочный сценарий для сценария vim из командной строки).Я лично предпочитаю использовать список arg для всех манипуляций с несколькими файлами.Например:

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

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

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

11 голосов
/ 10 июля 2010

Откройте терминал.Введите:

$ vim -w indentme.scr foo.c

Затем введите это точно (в командном режиме):

gg=G:wq

Это закроет vim, сохранив процесс отступа всех строк в файле к сценарию Vim.звонил indentme.scr.

Примечание: indentme.scr будет содержать запись всех набранных ключевых команд, поэтому, когда вы закончите отступ файла, не тратьте много времени на использованиеклавиши со стрелками, чтобы просмотреть файл, потому что это приведет к гораздо большему сценарию и значительно замедлит пакетные операции.

Теперь, чтобы сделать отступ для всех строк в файле, просто введите следующую команду:

$ vim -s indentme.scr unindented-file.c

Vim будет мигать в открытом режиме (если вы работаете на быстром компьютере и не редактируете огромный файл), выравнивая все строки и сохраняя файл на месте.

К сожалению, это будет работать только с одним файлом за раз, но вы можете легко масштабировать функциональность, используя цикл sh for:

for filename in *.ttl ; do
    vim -s indentme.scr "$filename"
done

Примечание: Этосохранит любой файл.Если set bk не находится в вашем ~/.vimrc, не ожидайте сохранения резервной копии.

3 голосов
/ 27 августа 2011

Я ушёл от раствора амфетамина.Однако мне нужно было рекурсивно искать по нескольким каталогам.Вот решение, которое я использовал:

$ find . -type f -name '*.ttl' -exec vim -s indentme.scr "{}" \;
0 голосов
/ 09 декабря 2016

Исходя из приведенных выше ответов, я хотел бы завершить это. Я начну с нуля, чтобы новичок мог понять.

Шаг 1 Установите astyle (инструмент, используемый для форматирования) с помощью следующей команды Откройте терминал. Тип:

sudo apt-get install astyle

Шаг-2 Убедитесь, что в вашей системе установлен vim. Запустите приведенные ниже команды из каталога, в котором находятся ваши файлы кода. Команда ниже создаст скрипт, который мы намерены запускать рекурсивно, поэтому чтобы украсить каждый файл в нашем каталоге. (как указано в ответе выше)

vim -w indentme.scr foo.c

Шаг-3 Затем введите это точно (в командном режиме) и нажмите ввод

:%!astyle 

Шаг-4 Затем введите это точно (в командном режиме) и нажмите ввод

:wq

Step-5 Последний выполнить это рекурсивно с помощью следующей команды:

find . -type f -name '*.cpp' -exec vim -s indentme.scr "{}" \;

Все ваши файлы cpp будут правильно отформатированы.

...