当有注释掉的大括号时,如何用vim缩进行?

时间:2013-10-25 12:38:34

标签: vim comments indentation braces

我通常使用vim re-indent运算符('=')来根据其语法缩进我的源代码。我也在整个文件中使用它,特别是如果我必须阅读由其他人编写的源代码并且他们有不同的选项卡设置或类似的东西('gg = G'在那里真的很有帮助)。当我有类似

之类的东西时,这只会有问题
(1) int main() {
(2)     for (int i=0; i<3; i++) {
(3)     //for (int i=0; i<4; i++) {
(4)         std::cout << i << std::endl;
(5)     }
(6) }

当我尝试缩进此代码时,我得到以下缩进级别:

(1) level 0 (which is good)
(2) level 1 (also)
(3) level 2 (could be 1, but I can live with that)
(4) level 2 (good)
(5) level 1 (good)
(6) level 1 (this is the problem)

因此第(5)行中的右括号与第(3)行中的左大括号相关联,该大括号被注释掉,因此不是语法的一部分。并且线(6)中的闭合支架与(2)中的开口配对配对,这是错误的。此问题也会影响其余代码,因为在此代码之后的函数将不会与级别0对齐,而是从级别1开始。

如果光标在第(5)行的括号上,则突出显示(2)中正确的匹配括号,但按'%'会跳转到第(3)行。这个问题已解决here,但假设的解决方案(一个名为matchit的插件)只能修复%,而不是=。

是否有人知道解决此问题的插件或黑客?

提前致谢。

1 个答案:

答案 0 :(得分:2)

使用外部程序(如缩进)代替vim缩进:

  1. 在Linux上安装缩进(例如 sudo apt-get install indent
  2. 在vim上,设置 equalprg 变量:
  3. :set equalprg=indent\ -kr\ -i8\ -ts8\ -sob\ -l80\ -ss\ -bs