当我从另一个文件复制代码时,格式被搞乱了,就像这样:
fun() { for(...) { for(...) { if(...) { } } } }
如何在vim中自动格式化这些代码?
w8biq8rn1#
尝试以下按键:
gg=G
说明:gg转到文件的顶部,=是修复缩进的命令,G告诉它执行操作到文件的结尾。
gg
=
G
7rtdyuoh2#
我喜欢使用程序艺术风格.根据他们的website:Artistic Style是C、C++、C#和Java编程语言的源代码缩进器、格式化器和美化器。它可以在Windows、Linux和Mac上运行。它可以做一些事情,比如缩进、用空格替换制表符(反之亦然)、在操作周围放置空格(如果你喜欢的话,可以将if(x<2)转换为if ( x<2 ))、在函数定义的同一行放置大括号,或者将它们移动到下面的行等。所有选项都由命令行参数控制。要在vim中使用它,只需将formatprg选项设置为它,然后使用gq命令。例如,我在.vimrc中有:
if(x<2)
( x<2 )
autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\ -T4pb
这样,每当我打开一个.cpp文件时,formatprg就会被设置成我喜欢的选项。然后,我可以键入gg来转到文件的顶部,键入gqG来根据我的标准格式化整个文件。如果我只需要重新格式化一个函数,我可以转到函数的顶部,然后键入gq][,它就会只重新格式化那个函数。我对astyle的选项-T4pb只是我的偏好,你可以浏览their docs,然后改变选项,让它按照你喜欢的方式格式化代码。这里有一个演示。在一个样式之前:
-T4pb
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; }
a14dhokn3#
前面已经提到了用于正确缩进代码的内置命令(gg=G)。如果你想 * 美化 * 代码,你需要使用一个外部应用程序,比如indent。因为%表示当前文件处于ex模式,你可以这样使用它:
%
:!indent %
de90aj5v4#
我发现clang-format工作得很好。clang documentation中有一些键绑定示例我更喜欢在vim中使用equalprg绑定,这允许您使用G=gg或其他=缩进选项调用clang-format。只需在.vimrc文件中输入以下内容:
clang-format
equalprg
G=gg
autocmd FileType c,cpp setlocal equalprg=clang-format
kfgdxczn5#
插件vim-autoformat让你用一个命令格式化你的缓冲区(或缓冲区选择):https://github.com/vim-autoformat/vim-autoformat。它使用外部格式程序来实现,并使用vim的缩进功能。
xzv2uavs6#
我喜欢上面提到的indent,但大多数时候我只想格式化我正在处理的文件的一小部分。由于indent可以从stdin中获取代码,因此非常简单:1.选择要使用V或类似命令格式化的代码块。1.键入:!indent进行格式化。astyle也接受stdin,因此您可以在此处使用相同的技巧。
indent
:!indent
astyle
deikduxw7#
我想补充的是,为了防止它被弄乱,你可以在粘贴之前输入:set paste,粘贴之后,你可以输入:set nopaste,这样js-beamize和indenting就可以重新工作了。
:set paste
:set nopaste
50pmv0ei8#
也许你可以试试下面的$indent -kr -i8 *.c希望对你有用!
vyswwuz29#
他们有一个叫做indent的工具,你可以用apt-get install indent下载,然后运行indent my_program.c。
apt-get install indent
indent my_program.c
9条答案
按热度按时间w8biq8rn1#
尝试以下按键:
说明:
gg
转到文件的顶部,=
是修复缩进的命令,G
告诉它执行操作到文件的结尾。7rtdyuoh2#
我喜欢使用程序艺术风格.根据他们的website:
Artistic Style是C、C++、C#和Java编程语言的源代码缩进器、格式化器和美化器。
它可以在Windows、Linux和Mac上运行。它可以做一些事情,比如缩进、用空格替换制表符(反之亦然)、在操作周围放置空格(如果你喜欢的话,可以将
if(x<2)
转换为if( x<2 )
)、在函数定义的同一行放置大括号,或者将它们移动到下面的行等。所有选项都由命令行参数控制。要在vim中使用它,只需将formatprg选项设置为它,然后使用gq命令。例如,我在.vimrc中有:
这样,每当我打开一个.cpp文件时,formatprg就会被设置成我喜欢的选项。然后,我可以键入gg来转到文件的顶部,键入gqG来根据我的标准格式化整个文件。如果我只需要重新格式化一个函数,我可以转到函数的顶部,然后键入gq][,它就会只重新格式化那个函数。
我对astyle的选项
-T4pb
只是我的偏好,你可以浏览their docs,然后改变选项,让它按照你喜欢的方式格式化代码。这里有一个演示。在一个样式之前:
源自a风格(gggqG):
a14dhokn3#
前面已经提到了用于正确缩进代码的内置命令(
gg=G
)。如果你想 * 美化 * 代码,你需要使用一个外部应用程序,比如indent。因为%
表示当前文件处于ex模式,你可以这样使用它:de90aj5v4#
我发现
clang-format
工作得很好。clang documentation中有一些键绑定示例
我更喜欢在vim中使用
equalprg
绑定,这允许您使用G=gg
或其他=
缩进选项调用clang-format
。只需在.vimrc文件中输入以下内容:
kfgdxczn5#
插件vim-autoformat让你用一个命令格式化你的缓冲区(或缓冲区选择):https://github.com/vim-autoformat/vim-autoformat。它使用外部格式程序来实现,并使用vim的缩进功能。
xzv2uavs6#
我喜欢上面提到的
indent
,但大多数时候我只想格式化我正在处理的文件的一小部分。由于indent
可以从stdin中获取代码,因此非常简单:1.选择要使用V或类似命令格式化的代码块。
1.键入
:!indent
进行格式化。astyle
也接受stdin,因此您可以在此处使用相同的技巧。deikduxw7#
我想补充的是,为了防止它被弄乱,你可以在粘贴之前输入
:set paste
,粘贴之后,你可以输入:set nopaste
,这样js-beamize和indenting就可以重新工作了。50pmv0ei8#
也许你可以试试下面的$indent -kr -i8 *.c
希望对你有用!
vyswwuz29#
他们有一个叫做
indent
的工具,你可以用apt-get install indent
下载,然后运行indent my_program.c
。