2010-07-10 2 views
33

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

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

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

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

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

+0

это немного запутывает ... какой Shell вы используете? Если вы используете что-то вроде bash (и используя ответ от амфетамашина ниже), то должно работать следующее: для файла в * .ttl * TTL; сделать vim -s indentme.src $ file; done – skeept

ответ

57

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

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

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

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

+0

Thanks Nicholas, Это просто отличный способ сделать. Также это очень полезно во многих других случаях. Несмотря на то, что я смог использовать скрипт, это намного быстрее. Ну, у меня около 900 файлов, которые мне пришлось изменить. Только с икотой, с которой я сталкивался, каждый раз, когда он заполняет экран именами файлов, я должен нажать пробел, чтобы он мог взять следующий набор файлов. – hari

+5

Если это мешает вам, вы должны быть в состоянии избежать подсказки «--Больше» и ударить пространство на каждом экране с помощью либерального применения ': silent'. Например. ': argdo silent execute" normal gg = G "| silent update' –

+1

+1 и @ nicholasa.evans Я бы переместил/скопировал содержимое этого комментария в фактический ответ (но это только я) – CoatedMoose

11

Открыть терминал. Тип:

$ vim -w indentme.scr foo.c 

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

gg=G:wq 

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

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

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

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

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

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

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

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

2

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

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

Ссылаясь на приведенные выше ответы, я хотел бы сделать это полностью. Я начну с нуля, чтобы начинающий мог понять.

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

sudo apt-get install astyle 

Шаг 2 Убедитесь, что ВИМ установлен на вашем system.run приведенные ниже команды из каталога, в котором файлы кода are.The ниже команды будет создать сценарий, который мы намерены запустить рекурсивно для того, чтобы украсить каждый и каждый файл в нашем каталоге. (как указано в ответе выше)

vim -w indentme.scr foo.c 

Шаг 3 Затем введите это точно (в командном режиме) и нажмите клавишу ВВОД

:%!astyle 

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

:wq 

Шаг-5 Последний запуск рекурсивно с помощью следующей команды:

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

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

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