2010-03-01 154 views
193

当我从另一个文件中复制代码,格式是搞砸了,就像这样:如何在vim中自动格式化/缩进C代码?

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

我怎样才能自动套用格式在vim这个代码?

+2

对于任何想要格式化而不仅仅是缩进代码的人,第二个答案(我的)解决了这个问题。如果你只是想修复缩进,接受的答案是最简单的方法。 – Derek 2015-04-02 21:07:19

回答

443

试试下面的快捷键:

gg=G 

说明:gg转到文件的顶部,=是修复压痕命令和G告诉它执行操作的文件的末尾。

+18

这只能缩进代码。 AUTOFORMAT可以做些什么吗? – 2010-03-01 12:54:29

+7

有什么区别? – 2010-03-01 13:35:17

+4

我喜欢这个命令,简单而有用。谢谢 – 2010-03-01 13:54:52

24

已经提到用于正确缩进代码的内建命令(gg=G)。如果你想美化的代码,你需要使用外部应用程序,如indent。由于%表示在EX模式当前文件,你可以使用它像这样:

:!indent % 
73

我喜欢用程序艺术风格。根据他们的website

艺术风格是一个源代码压头,格式化,并为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。如果我只需要重新设置一个单一的功能,我可以到函数的顶部,然后键入q][,它会重新只是功能。

我对款式的选择-T4pb只是我的偏好。您可以查看their docs,然后更改选项以使其格式化代码,只要您喜欢。

这是一个演示。

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; 
} 

希望有所帮助的astyle之前。

+2

对于其他格式有没有这样的东西?红宝石,XML,JSON等? – derGral 2011-06-17 19:22:55

+0

感谢您的艺术提示! – pjvds 2012-04-20 08:57:34

+1

@Ryan检查vim-autoformat,请参阅下面的答案。 BTW vim-autoformat也使用astyle等。 – 2013-04-14 20:13:01

51

OP要求自动格式化,但接受了只能自动缩进的答案。

这里的区别是:

ORIGINAL

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; 
} 
+13

啊,我明白了。现在问题仍然是如何实际autoformat :) – 2010-11-22 08:58:43

+34

-1这是一个评论,而不是一个答案。您需要提供实际实现自动生成的内容,而不仅仅是显示它的内容。 – oligofren 2013-04-19 06:59:46

+29

在这种特殊情况下,我看不出他如何通过发布答案来表达他的观点? – expelledboy 2013-05-14 07:59:48

2

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

希望这对您有用!

3

我喜欢indent如上所述,但大多数情况下我只想格式化我正在处理的一小部分文件。由于indent可以从标准输入代码需要,它真的很简单:

  1. 选择要使用V或类似格式的代码块。
  2. 通过键入:!indent来格式化。

astyle也需要stdin,所以你可以在那里使用相同的技巧。

5

我发现clang-format效果很好。

里有clang documentation

一些示例键绑定我更喜欢使用equalprg在vim结合。这允许您使用G=gg或其他=缩进选项调用clang-format

只要把你的.vimrc文件中:

autocmd FileType c,cpp setlocal equalprg=clang-format 
1

我想补充一点,为了防止它在第一时间被搞砸了,你可以粘贴之前键入:set paste。粘贴完成后,您可以输入:set nopaste来进行js-beautify和缩进等工作。

0

他们是一个名为indent的工具。您可以使用apt-get indent进行下载,然后运行indent my_program.c

相关问题