如何在vim中自动格式化/缩进C代码?

当我从另一个文件复制代码时,格式是混乱的,就像这样:

fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}

如何在vim中自动格式化这段代码?

200926 次浏览

试试下面的按键:

gg=G

解释:gg指向文件的顶部,=是修复缩进的命令,而G告诉它执行直到文件末尾的操作。

前面已经提到了适当缩进代码的内置命令(gg=G)。如果你想美化代码,你将需要使用一个外部应用程序,如缩进。由于%表示当前文件在ex模式下,你可以这样使用它:

:!indent %

我喜欢用“艺术风格”这个程序。根据他们的网站:

art Style是C、c++、c#和Java编程语言的源代码缩进器、格式化器和美化器。

它可以在windows, Linux和Mac上运行。它会做一些事情,比如缩进,用空格替换制表符,反之亦然,在操作周围放置空格(如果你喜欢的话,将if(x<2)转换为if ( x<2 )),在函数定义的同一行上放置大括号,或将它们移动到下面的行,等等。所有选项都由命令行参数控制。

为了在vim中使用它,只需将formatprg选项设置为它,然后使用gq命令。例如,我在。vimrc中有:

autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\ -T4pb

这样每当我打开一个。cpp文件时,formatprg就会设置成我喜欢的选项。然后,我可以输入gg转到文件的顶部,并输入gG根据我的标准格式化整个文件。如果我只需要重新格式化一个函数,我可以转到函数的顶部,然后键入g,它就会重新格式化那个函数。

我拥有的style选项-T4pb只是我的偏好。你可以查看他们的文档,并更改选项,让它按照你喜欢的方式格式化代码。

这是一个演示。astyle之前:

int main(){if(x<2){x=3;}}


float test()
{
if(x<2)
x=3;
}

After style (gggqG):

int main()
{
if (x < 2)
{
x = 3;
}
}


float test()
{
if (x < 2)
x = 3;
}

希望这能有所帮助。

也许你可以试试下面的方法 $缩进-kr -i8 *.c

希望对你有用!

插件vim-autoformat允许你用一个命令https://github.com/vim-autoformat/vim-autoformat来格式化你的缓冲区(或缓冲区选择)。为此,它使用了外部格式程序,并使用了vim的缩进功能。

如上所述,我喜欢indent,但大多数情况下,我只想格式化我正在处理的文件的一小部分。由于indent可以从stdin中获取代码,它非常简单:

  1. 选择你想用V或类似的方法格式化的代码块。
  2. 输入:!indent格式化。

astyle也接受stdin,所以你可以在这里使用相同的技巧。

我发现clang-format工作得很好。

铿锵声文档中有一些示例键绑定

我更喜欢在vim中使用equalprg绑定。这允许你用G=gg或其他=缩进选项调用clang-format

只需在你的。vimrc文件中放入以下内容:

autocmd FileType c,cpp setlocal equalprg=clang-format

我想补充的是,为了防止它在粘贴之前被搞砸,你可以在粘贴之前输入:set paste。粘贴之后,你可以输入:set nopaste来进行js-beautify和缩进等操作。

它们是一个名为indent的工具。你可以用apt-get install indent下载它,然后运行indent my_program.c