vim: удалить предыдущий отступ кода и преобразовать в другой

3

У меня есть проект ac с несколькими файлами (более 100), коды написаны в стиле Whitesmiths , но я хочу изменить их на отступ в стиле K & R. Можно ли использовать vim в автоматическом режиме?

Например, у меня есть сценарий emacs-lisp для достижения этой цели -

(progn 
  (find-file "{}") 
  (mark-whole-buffer) 
  (setq indent-tabs-mode nil) 
  (untabify (point-min) (point-max)) 
  (indent-region (point-min) (point-max) nil) 
  (save-buffer))

Мне было интересно, есть ли подобный трюк, который можно сделать с vim.

Обновление: я нашел еще один хороший инструмент под названием astyle , который также поддерживает автоиндентирование для разных языков (с широким диапазоном стилей).

ramgorur
источник
4
Следует отметить GNU Indent, который делает это сам по себе и хорошо протестирован. Как избежать повторного изобретения колеса и т. Д.
Даниэль Андерссон,

Ответы:

5

Либо передайте все файлы C в исполняемый файл Vim vim file1.c dir/file2.c, либо добавьте их в качестве аргументов изнутри Vim (см. :help file-searching):

:args **/*.c **/*.h

Затем вы можете массово редактировать их через :argdo. Vim имеет встроенный механизм отступов или может использовать внешний форматировщик кода. Читайте подробности на :help C-indenting.

После настройки параметров отступа ( 'cindent', 'cinoptions'и т. Д.) Вы можете применить все файлы с помощью

:argdo execute 'normal! ggVG=' | update

( ggVGвыбирает весь буфер в визуальном режиме, =затем переформатирует.)

Инго Каркат
источник
У вас есть лучшие ответы Vim :) +1
Ярослав Рахматуллин
4

отступ человека * прокрутка прокрутка прокрутка *

   The Kernighan & Ritchie style is used  throughout  their  well-known  book
   "The  C  Programming Language".  It is enabled with the ‘-kr’ option.  The
   Kernighan & Ritchie style corresponds to the following set of options:

        -nbad -bap -bbo -nbc -br -brs -c33 -cd33 -ncdb -ce -ci4 -cli0
        -cp33 -cs -d0 -di1 -nfc1 -nfca -hnl -i4 -ip0 -l75 -lp -npcs
        -nprs -npsl -saf -sai -saw -nsc -nsob -nss

Например:

indent -kr source.cpp
Ярослав Рахматуллин
источник