当我从另一个文件复制代码时,格式会混乱,如下所示:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
如何在 vim 中自动格式化此代码?
尝试以下按键:
gg=G
说明:
gg
转到文件顶部,=
是修复缩进的命令,G
告诉它执行操作到文件末尾。
我喜欢使用艺术风格程序。根据他们的网站:
Artistic Style 是 C、C++、C# 和 Java 编程语言的源代码缩进器、格式化器和美化器。
它可以在 Window、Linux 和 Mac 上运行。它将执行诸如缩进、用空格替换制表符或反之亦然、在操作周围放置空格(如果您喜欢的话,将
if(x<2)
转换为 if ( 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;
}
astyle之后(gggqG):
int main()
{
if (x < 2)
{
x = 3;
}
}
float test()
{
if (x < 2)
x = 3;
}
https://github.com/vim-autoformat/vim-autoformat。它使用外部格式程序来实现此目的,并回退到 vim 的缩进功能。
indent
,但大多数情况下我只想格式化我正在处理的文件的一小部分。由于
indent
可以从 stdin 获取代码,所以它非常简单:
:!indent
进行格式化。
astyle
也接受标准输入,所以你可以在那里使用相同的技巧。
:set paste
。粘贴后,您可以输入
:set nopaste
来执行诸如 js-beautify 和缩进之类的操作。
$缩进-kr -i8 *.c
indent
。您可以使用
apt-get install indent
下载它,然后运行
indent my_program.c
。