2

我通常使用 vim 重新缩进运算符 ('=') 以便根据其语法缩进我的源代码。我还在整个文件中使用它,特别是如果我必须阅读其他人编写的源代码并且他们有不同的选项卡设置或类似的东西('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) 行。这个问题在这里得到解决,但假设的解决方案(一个名为 matchit 的插件)只修复了 %,而不是 =。

有谁知道解决这个问题的插件或黑客?

提前致谢。

4

1 回答 1

2

使用外部程序(如indent)而不是 vim 缩进:

  1. 安装缩进(例如,sudo apt-get install indent,在 Linux 上)
  2. 在 vim 上,设置equalprg变量:
:set equalprg=indent\ -kr\ -i8\ -ts8\ -sob\ -l80\ -ss\ -bs 
于 2013-10-25T13:00:24.717 回答