2

我目前正在编辑一个具有类似于 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对 word执行 a 操作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)

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

4

2 回答 2

3

我懂了....

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

所以,5紧接着{指定的折叠级别,这把事情搞砸了。

于 2011-02-01T21:49:12.383 回答
0

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

要创建折叠,请使用zfzFzf适用于视觉模式,也适用于zf2j在 2 行向下创建折叠的动作。zF已经以“逐行”方式工作。

在您的情况下,最实用的方法是将光标定位在括号上(f{例如使用)并运行zf%以创建和关闭指向匹配括号的折叠。无论如何,如果该括号在另一行上会更实用(因此您可以使用]]它),但这是超出此答案范围的惯例:-)

于 2011-01-31T23:37:42.517 回答