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

r8xiu3jd  于 2022-12-26  发布在  其他
关注(0)|答案(9)|浏览(198)

当我从另一个文件复制代码时,格式被搞乱了,就像这样:

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

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

w8biq8rn

w8biq8rn1#

尝试以下按键:

gg=G

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

7rtdyuoh

7rtdyuoh2#

我喜欢使用程序艺术风格.根据他们的website
Artistic 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来转到文件的顶部,键入gqG来根据我的标准格式化整个文件。如果我只需要重新格式化一个函数,我可以转到函数的顶部,然后键入gq][,它就会只重新格式化那个函数。
我对astyle的选项-T4pb只是我的偏好,你可以浏览their docs,然后改变选项,让它按照你喜欢的方式格式化代码。
这里有一个演示。在一个样式之前:

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

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

源自a风格(gggqG):

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

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

a14dhokn3#

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

:!indent %
de90aj5v

de90aj5v4#

我发现clang-format工作得很好。
clang documentation中有一些键绑定示例
我更喜欢在vim中使用equalprg绑定,这允许您使用G=gg或其他=缩进选项调用clang-format
只需在.vimrc文件中输入以下内容:

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

kfgdxczn5#

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

xzv2uavs

xzv2uavs6#

我喜欢上面提到的indent,但大多数时候我只想格式化我正在处理的文件的一小部分。由于indent可以从stdin中获取代码,因此非常简单:
1.选择要使用V或类似命令格式化的代码块。
1.键入:!indent进行格式化。
astyle也接受stdin,因此您可以在此处使用相同的技巧。

deikduxw

deikduxw7#

我想补充的是,为了防止它被弄乱,你可以在粘贴之前输入:set paste,粘贴之后,你可以输入:set nopaste,这样js-beamize和indenting就可以重新工作了。

50pmv0ei

50pmv0ei8#

也许你可以试试下面的$indent -kr -i8 *.c
希望对你有用!

vyswwuz2

vyswwuz29#

他们有一个叫做indent的工具,你可以用apt-get install indent下载,然后运行indent my_program.c

相关问题