Когда я копирую код из другого файла, форматирование портится, например:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
Как я могу автоматически отформатировать этот код в vim?
Когда я копирую код из другого файла, форматирование портится, например:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
Как я могу автоматически отформатировать этот код в vim?
Ответы:
Попробуйте следующие нажатия клавиш:
gg=G
Объяснение: gg
идет в начало файла, =
это команда для исправления отступа и G
говорит ему выполнить операцию до конца файла.
Мне нравится использовать программу Artistic Style. Согласно их веб-сайту :
Artistic Style - это индентор, форматер и beautifier исходного кода для языков программирования C, C ++, C # и Java.
Он работает в Window, 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
- это только мои предпочтения. Вы можете просматривать их документы и изменять параметры, чтобы форматировать код так, как вам нравится.
Вот демо. Перед стилем:
int main(){if(x<2){x=3;}}
float test()
{
if(x<2)
x=3;
}
После астиля (gggqG):
int main()
{
if (x < 2)
{
x = 3;
}
}
float test()
{
if (x < 2)
x = 3;
}
Надеюсь, это поможет.
Плагин 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
sudo apt install clang-format
Мне нравится, indent
как упоминалось выше, но чаще всего я хочу отформатировать только небольшой раздел файла, над которым я работаю. Так как indent
можно взять код из stdin, это действительно просто:
:!indent
.astyle
также принимает стандартный ввод, так что вы можете использовать тот же трюк.
Я хотел добавить, что для того, чтобы не допустить путаницы, вы можете набрать :set paste
текст перед вставкой. После вставки вы можете ввести :set nopaste
такие вещи, как js-beautify и отступ для работы снова.
:set paste!
для этого, который переключает значение вставки вместо установки его. Это облегчает выключение, так как вы можете просто прокрутить несколько команд назад и нажать Enter.