Отступы в VIM со всеми файлами в папке
У меня есть папка, содержащая сотни файлов TTL (TeraTermLanguage).
Теперь я хотел отступом все эти файлы.
Я создал teraterm.vim для отступов, и я открываю файл с помощью VIM и делаю "gg = G", а весь файл получает отступы правильно.
Но есть ли какой-либо способ, где я могу отложить все файлы в папке.
Я хотел сделать с помощью Shell. Но в VIM я не мог передать команду indent в качестве аргумента VIM.
Пожалуйста, предложите, какой из лучших способов сделать отступы для всех файлов в VIM.
Ответы
Ответ 1
Гораздо проще, чем сценарий vim из командной строки bash - использовать vimscript изнутри vim (или, возможно, гораздо более простой однострочный для сценария vim из командной строки). Я лично предпочитаю использовать список arg для всех манипуляций с несколькими файлами. Например:
:args ~/src/myproject/**/*.ttl | argdo execute "normal gg=G" | update
-
args
устанавливает arglist, используя подстановочные знаки (**
будет соответствовать текущему каталогу, а также подкаталогам)
-
|
позволяет запускать несколько команд в одной строке
-
argdo
запускает следующие команды для каждого arg (он проглотит второй |
)
-
execute
не позволяет normal
усвоить следующий канал.
-
normal
запускает следующие команды нормального режима (с которыми вы работали в первую очередь)
-
update
похож на :w
, но сохраняет только при изменении буфера.
Этот шаблон :args ... | argdo ... | update
очень полезен для любых видов работы с файлами (например, поиск и замена с помощью %s/foo/bar/ge
или установка однородных fileformat
или fileencoding
)).
(другие люди предпочитают подобный шаблон, используя список буфера и :bufdo
, но с помощью списка arg мне не нужно беспокоиться о закрытии текущих буферов или открытии нового сеанса vim.)
Ответ 2
Откройте терминал. Тип:
$ vim -w indentme.scr foo.c
Затем введите это точно (в командном режиме):
gg=G:wq
Это закроет vim, сохранив процесс отступов всех строк в файле до Vim script под названием indentme.scr
.
Примечание. indentme.scr
будет содержать запись всех введенных команд клавиатуры, поэтому, когда вы закончите отступы от файла, не тратьте много времени, используя клавиши со стрелками, чтобы посмотреть вокруг файл, потому что это приведет к значительному увеличению script и значительно замедлит пакетные операции.
Теперь, чтобы отложить все строки в файле, просто введите следующую команду:
$ 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
Я ушел из раствора амфетамашина. Однако мне пришлось рекурсивно искать через несколько каталогов. Здесь решение, которое я использовал:
$ find . -type f -name '*.ttl' -exec vim -s indentme.scr "{}" \;
Ответ 4
Ссылаясь на приведенные выше ответы, я хотел бы сделать это полным.
Я начну с нуля, чтобы начинающий мог понять.
Шаг 1
Установите astyle (инструмент, используемый для форматирования), используя следующую команду
Откройте терминал. Тип:
sudo apt-get install astyle
Шаг 2 Убедитесь, что у вас установлен vim. Запустите следующие команды из каталога, в котором находятся ваши файлы кода. В приведенной ниже команде будет создан script, который мы намерены бежать рекурсивно, чтобы украсить каждый файл в нашем каталоге (как упоминалось в вышеприведенном ответе)
vim -w indentme.scr foo.c
Шаг-3 Затем введите это точно (в командном режиме) и нажмите enter
:%!astyle
Шаг-4 Затем введите это точно (в командном режиме) и нажмите enter
:wq
Шаг-5 Последний запуск этого рекурсивно с помощью следующей команды:
find . -type f -name '*.cpp' -exec vim -s indentme.scr "{}" \;
Все ваши файлы cpp будут отформатированы правильно.