当在同一条线上有{和a}时,在Vim中奇怪地折叠。& *

时间:2011-01-31 23:31:02

标签: vim folding

我目前正在编辑一个类似于

的twp函数的C ++文件
int func_name_1(int param) {
   do_stuff();
   and_more();
}

int func_name_2(int param) {
   do_different_stuff();

   STRUCT_TYPE s = {5, 8, 10, 12};
   do_something_with(s);
}

如果我对单词zc执行func_name_1,vim会按预期折叠该函数,以便现在看起来像

int func_name_1(int param) {--------------------

然而,在func_name_2上,函数折叠如下:

int func_name_2(int param) {---------------------
   do_something_with(s);
}

这不是我想要的。由于某种原因,在一条线上打开和关闭{}似乎会扰乱折叠算法。

如果有人知道我怎么能得到一个“更好”的折叠,我会欣赏任何正确的方向。

编辑我认为与此问题相关的选项在我的缓冲区中设置如此

set foldmarker={,}
set foldmethod=marker
set foldtext=getline(v:foldstart)

编辑II :如果我将开启和关闭{...}的行改为STRUCT_TYPE s = { 5, 8, 10, 12};(注意{之后的空格),那么折叠按预期工作。

2 个答案:

答案 0 :(得分:3)

哦......我明白了....

:help fold-marker告诉我:标记可以包含一个级别[..]以下数字指定折叠 水平

所以,5{指定折叠级别之后立即{{1}},这搞砸了。

答案 1 :(得分:0)

zc命令关闭当前折叠。您可能创建了一个可以关闭它的文件夹,因此您的问题在于创建折叠而不是关闭它。

要创建折叠,请使用zfzFzf适用于可视模式,也适用于zf2j之类的动作,可在2行上创建折叠。 zF已经以“线路”的方式运作。

在您的情况下,最实用的方法是将光标放在括号上(例如使用f{)并运行zf%以创建并关闭转到匹配括号的折叠。无论如何,如果那个括号在另一条线上会更加实用(所以你可以用]]去它)但这是一个超出这个答案范围的约定: - )