vim - 通过表达式折叠代码

时间:2015-03-22 12:34:31

标签: regex vim syntax

我有一些带有大括号代码块的源代码

我希望能够折叠前面有一些if条件的块,然后展开其他代码块。

示例输入:

print "this is a test"
if a == b {
  { x = 1
    y = 2
    z = 3
  }

  k = [1, 2, 3]
}

{ l = 5 }
return "foo"

预期产出:

print "this is a test"
if a == b {
+-- 6 lines: 
}

{ l = 5 }
return "foo"

我已阅读thisthis,但仍不知道如何解决问题。

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

假设if'关闭'}'大括号位于一行的开头,你可以使用:

:g/if.*{/+,/^}/-fold

这会折叠if的{}括号内的语句,不包括大括号本身。

这是通过在定义g 范围的模式之后放置的+和 - 移动来实现的(模式之间存在彗差):+从第一个匹配的模式向下移动一行(/if.*{/)和 - 从第二个匹配模式(/ ^} /)中移动范围一行

如果您缩进了'}'大括号或任何上述命令不适用的情况,您可以尝试寻找可以利用的其他模式,并根据需要更改上面的ex命令。