我对VIM比较陌生。我有一些源代码,这是一团糟。乍一看,我希望至少得到一个清晰和有组织的代码视图,所以我喜欢将它正确地格式化,我的意思是缩进取决于函数的深度等等。是否可以使用VIM格式化C++代码?
我不知道VIM是否可以完成,否则您可以推荐哪些其他命令行工具。
感谢
我对VIM比较陌生。我有一些源代码,这是一团糟。乍一看,我希望至少得到一个清晰和有组织的代码视图,所以我喜欢将它正确地格式化,我的意思是缩进取决于函数的深度等等。是否可以使用VIM格式化C++代码?
我不知道VIM是否可以完成,否则您可以推荐哪些其他命令行工具。
感谢
而VIM是一个真正的瑞士小刀我还是比较喜欢的外部工具进行一些工作。与使用内置的等价物相比,这种方法有时更直观,更易于记忆。
在缩进的情况下,我通过astyle过滤整个文件缓冲区。在几分钟内,astyle参数更容易掌握,特别是如果您不是vim大师。此外,astyle提供更多的灵活性来微调输出。
首先安装的astyle:# apt-get install astyle
然后:
:%!astyle
(简单的情况 - 的astyle缺省模式是C/C++)
或
:%!astyle --mode=c --style=ansi -s2
(ANSI C++风格,使用每个缩进层次的两个空间)
或
:1,40!astyle --mode=c --style=ansi
(ANSI C++风格,滤波器只线1-40)
的Vim一定会做到这一点,虽然结果可能不是完美的:
您可以了解更多的平等命令::help =
沿着m000的想法提出的通用解决方案是使用UniversalIndentGUI作为外部工具。
感谢您的信息,但我更喜欢VIM,因为我必须在远程机器上调试代码 – flow 2010-03-24 21:12:00
有一个vim插件,可以在vim中对你的代码进行格式化。这就是所谓的VIM,自动套用格式,你可以在这里下载:
https://github.com/Chiel92/vim-autoformat
它外部代码格式化程序集成到VIM。例如,如果要格式化C,C++,C#或Java代码,则需要安装程序astyle,vim会自动将其设置为格式化程序。
我不写C++代码,但我写了一些Java代码。
相反,Vim支持一些常用语言的格式。 我已经为我设置了一个捷径来格式化缓冲区中的整个代码。 它会回到我刚才编辑的行:)
" format the file
map <leader>fm gg=G'.
就必须解决这一确切的问题,所以我想我会有助于挽救他人一段时间。
您可以使用gg=G
缩进您的代码。但是当你想调整自动缩进的方式时,事情就变得很难理解了。因此,如果你只关心错误的空白被删除,并且不关心格式化风格,gg=G
是最快捷的方法,因为它的内置。
如果您确实想要控制样式(例如,您试图使代码符合a style guide),那么您将需要一个外部工具来处理您的文件。您可以从vim中调用该工具::%!<toolname> <options>
。这通过工具管理文件并重新加载处理后的结果。 (你可以明显地用它来做任何你想对你的文件做的事情)
所以下一个问题是,你应该选择什么外部工具?无论如何,该方法是相同的:
现在,您使用的工具取决于您尝试复制的样式。如果你想复制广泛使用的风格,那么很有可能你需要astyle。
如果你想复制自定义样式,那么您将需要两件事情:
之间uncrustify和greatcode,你应该能够完全复制你想要的风格。
其实我撒谎了。还有另外一种方法,它叫clang-format。然而,你会想要阅读它的文档,它仍然处于早期阶段,所以一些选项不能很好地工作。这是一个漂亮的工具(绝对是最聪明的,因为它构造了代码的AST),它甚至可以用于Windows。
如果您要花时间阅读本手册,您还需要查看GNU Indent。
当然,还有最后一种方法,它实际上是花时间学习vim的缩进规则并为您的风格编写一个规则。这将需要时间,但它将与gg=G
一起使用。
的astyle上的一些注意事项VS uncrustify VS greatcode:
请注意,您不必选择一个工具。使用vim,你可以映射一个按键来连续执行几个命令,因此理论上你可以结合使用这些工具来获得你正在寻找的东西。
最后但并非最不重要的,这里是从我的.vimrc文件中,在那里我有映射F12调用的astyle有一些选项的摘录:
"A2 = attached brackets
"-s8 indent 8 spaces
"-xc attached braces to class declarations
"-xj remove braces for single statement ifs and elses
"-c convert tabs to spaces in the non-indentation part of the line
map <F12> :%!astyle -A2 -s8 -xc -xj -c<CR>
不要评判我的风格。只需使用该工具重现你想要的。
还有一个Vim插件依靠clang-format
:vim-clang-format
然后,你可以简单地映射到任何适合你的格式化命令。
现在我强烈推荐clang格式。它允许铛格式的简单集成到Vim中,一旦安装了铿锵格式:
http://clang.llvm.org/docs/ClangFormat.html#vim-integration
这是唯一的代码美化真正了解你的C++代码,它是真正的智能美化代码更像是一个人而不是一台机器。例如:
void TestFunction(int argument1, int argument2,
int argument3);
void TestFunctionVeryLongName(int argument1,
int argument2,
int argument3);
void TestFunctionWithRidiculouslyLongName(
int argument1, int argument2, int argument3);
在clang格式手册中建议的键绑定的另一种方法是在vim中使用'equalprg'绑定。这允许你用'G = gg'或其他'='缩进选项调用'clang-format'。 只需在你的'.vimrc'文件中加入以下内容: 'autocmd FileType c,cpp setlocal equalprg = clang-format' – Daniel 2016-10-27 02:24:46
哇,这真的太棒了,非常感谢 – flow 2010-03-24 10:56:31
是否有可能将此映射到像ctrl + shift + F这样的组合键? – 2014-03-27 12:00:55
您也可以通过将'equalprg'设置为astyle(例如:'set equalprg =〜/ astyle \ --style = google')来覆盖Vim的缩进运算符('=')来使用Astyle – Parsa 2014-08-03 14:56:11