当函数定义包含“*”时,带有默认“{{{”标记的“折叠创建标记”无法正常工作

`fold-create-marker` with default `{{{` marker not working properly when function definition contains `*`

我在vim

中有这个设置
foldmarker={{{,}}}
commentstring=/*%s*/
foldmethod=marker

我想使用 zf 创建新标记,它确实适用于

void foo(void bar) {
}

当我选择它并按 zf 时,我得到

void foo(void bar) {/*{{{*/
}/*}}}*/

到目前为止一切顺利。但是,当函数定义包含指针时,如

void foo(void * bar) {
}

我明白了

void foo(void * bar) {{{{
}/*}}}*/

这是错误的。如何配置 vim 即使在第二种情况下也能正常工作?

这种奇怪的行为是由 :help 'comments' 选项的默认值引起的,尤其是 mb:* 部分。

:help format-comments解释

  To avoid recognizing "*ptr" as a comment, the middle string includes the 'b' flag.

不幸的是,您编写指针的方式(* 之后的空白)打败了这种启发式方法,并且 Vim 将 * 检测为三件式的中间件评论(Vim 不验证它之前是否确实有开始部分),假设折叠开始已经是评论的一部分,因此跳过在那里添加 'commentstring'

要解决此问题,请调整您的编码风格(编写 void *bar),或修改 'comments' 选项,例如通过删除(或精炼,如果你使用它)中间部分:

setlocal comments-=mb:*

如果您需要保持中间部分 正确的手动折叠,您必须围绕 zf 编写一个小的包装映射来临时更改选项。