Подтвердить что ты не робот

Отступы в VIM со всеми файлами в папке

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

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

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

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

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

4b9b3361

Ответ 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 будут отформатированы правильно.