Как я могу autoformat / indent C код в vim?
когда я копирую код из другого файла, форматирование перепутано, например:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
Как я могу автоформировать этот код в vim?
10 ответов
попробуйте следующие комбинации клавиш:
gg=G
объяснение: gg
идет в верхнюю часть файла,=
- это команда для исправления отступа и G
говорит ему выполнить операцию до конца файла.
мне нравится использовать художественный стиль программы. Согласно их сайт:
художественный стиль-это индентер исходного кода, форматер и украшатель для языков программирования C, C++, C# и Java.
он работает в окне, Linux и Mac. Он будет делать такие вещи, как отступы, заменяя вкладки пробелами или наоборот, помещая пробелы вокруг операций, как вам нравится (преобразование if(x<2)
Если ( x<2 )
если вам так нравится), размещение фигурных скобок на той же строке, что и определения функций, или перемещение их в строку ниже и т. д. Все параметры управляются параметрами командной строки.
чтобы использовать его в vim, просто установите для него параметр formatprg, а затем используйте команду gq. Так, например, у меня в моем .vimrc:
autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\ -T4pb
так что всякий раз, когда я открываю .cpp файл, formatprg установлен с параметрами, которые мне нравятся. Затем я могу ввести gg, чтобы перейти в верхнюю часть файла, и gqG форматирование всего файла по моим меркам. Если мне нужно только переформатировать одну функцию, я могу перейти к верхней части функции, то типа gq][ и он переформатирует только эту функцию.
варианты, которые у меня есть для astyle,-T4pb
, это только мои предпочтения. Вы можете посмотреть через их документы, и изменить параметры, чтобы иметь его формат код, как вам нравится.
вот демо. Перед astyle:
int main(){if(x<2){x=3;}}
float test()
{
if(x<2)
x=3;
}
после astyle (gggqG):
int main()
{
if (x < 2)
{
x = 3;
}
}
float test()
{
if (x < 2)
x = 3;
}
надеюсь, это поможет.
OP попросил автоматическое форматирование, но принял ответ, который делает только автоматический отступ.
вот разница:
оригинал
int main(){if(x<2){x=3;}}
float test()
{
if(x<2)
x=3;
}
АВТОИНДЕНТ
int main(){if(x<2){x=3;}}
float test()
{
if(x<2)
x=3;
}
АВТОФОРМАТ
int main()
{
if (x < 2)
{
x = 3;
}
}
float test()
{
if (x < 2)
x = 3;
}
встроенная команда для правильного отступа кода уже упоминалась (gg=G
). Если вы хотите украшения код, вам нужно будет использовать внешнее приложение, как абзац. С %
обозначает текущий файл в режиме ex, вы можете использовать его следующим образом:
:!indent %
плагин vim-autoformat позволяет отформатировать буфер (или выбор буфера) с помощью одной команды:https://github.com/Chiel92/vim-autoformat. Для этого он использует программы внешнего формата с резервным вариантом функциональности отступа vim.
Я считаю, что clang-format
работает хорошо.
есть некоторые примеры Привязок клавиш в документация clang
Я предпочитаю использовать equalprg
привязка в vim. Это позволяет вызывать clang-format
С G=gg
и =
отступ варианты.
просто поместите следующее в ваш .файл vimrc:
autocmd FileType c,cpp setlocal equalprg=clang-format
мне нравится indent
Как упоминалось выше, но чаще всего я хочу отформатировать только небольшую часть файла, над которым я работаю. С indent
можно взять код из stdin, его очень просто:
- выделите блок кода, который вы хотите отформатировать с V или тому подобное. введя
:!indent
.
astyle
принимает stdin тоже, так что вы можете использовать тот же трюк там.
Я хотел добавить, что для того, чтобы предотвратить его испортили в первую очередь можно ввести :set paste
перед оклейкой. После вставки можно ввести :set nopaste
для таких вещей, как JS-украсить и отступ, чтобы снова работать.
их инструмент называется indent
. Вы можете скачать его с apt-get indent
, затем запустить indent my_program.c
.