当我从另一个文件复制代码时,格式会变得混乱,就像这样:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
我该如何在vim中自动格式化这段代码?
当我从另一个文件复制代码时,格式会变得混乱,就像这样:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
我该如何在vim中自动格式化这段代码?
gg=G
解释: gg
命令会跳转到文件顶部,=
命令是修复缩进的命令,而 G
则告诉它执行到文件末尾的操作。
我喜欢使用程序Artistic Style。根据他们的网站:
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到达文件顶部,并使用已经提到了适当缩进代码的内置命令(gg=G
)。如果您想要“美化”代码,您需要使用类似于indent这样的外部应用程序。由于在ex模式下,%
表示当前文件,因此您可以像这样使用它:
:!indent %
sudo apt install indent
安装 indent 工具。 - Roel Van de Paar我发现clang-format
表现良好。
clang文档中有一些示例键绑定。
我更喜欢在vim中使用equalprg
绑定。这使您可以使用G=gg
或其他=
缩进选项调用clang-format
。
只需将以下内容放入您的.vimrc文件中:
autocmd FileType c,cpp setlocal equalprg=clang-format
sudo apt install clang-format
。 - Eric插件 vim-autoformat 可以用一个命令格式化你的缓冲区(或缓冲区选择):https://github.com/vim-autoformat/vim-autoformat。它使用外部格式化程序实现,如果失败则使用 vim 的缩进功能。
我喜欢如上所述的缩进
,但我经常只想格式化我正在工作的文件中的一小部分。由于缩进
可以从标准输入中读取代码,所以非常简单:
:!indent
进行格式化。astyle
也可以从标准输入中读取,所以你可以在那里使用同样的技巧。
:set paste
。 粘贴后,您可以键入:set nopaste
使js-beautify和缩进等功能再次正常工作。:set paste!
来实现这个功能,它可以切换粘贴值而不是设置它。这使得关闭变得更加容易,因为你只需要向后滚动几个命令并按下回车即可。 - a'rindent
的工具。你可以使用 apt-get install indent
命令进行下载,然后运行 indent my_program.c
命令。如果想要了解这里提到的许多选项的概述和演示,@Gavin-Freeborn在YouTube上有一个很棒的视频:
https://www.youtube.com/watch?v=tM_uIwSucPU
它涵盖了一些Vim插件以及内置功能,例如=
、gq
和formatprg
。
=
、gq
和formatprg
之外。这仍然是一个非常有用的视频;如果我能找到时间(和回忆)回过头来添加相关的文字摘录,我会这样做的。YouTube似乎已经停止提供转录,至少对于非高级账户来说,所以这需要额外的努力。无论如何,我非常感谢你的解释! - undefined