首页 > 解决方案 > 当函数定义包含“*”时,带有默认“{{{”标记的“fold-create-marker”无法正常工作

问题描述

我在 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 才能正常工作?

标签: cvimfolding

解决方案


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

:help format-comments解释

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

不幸的是,您编写指针的方式(在 之后的空格*)破坏了这种启发式方法,并且 Vim 将 检测*为三段注释的中间部分(Vim 不验证在它之前实际上有一个开始部分),假设fold start 已经是评论的一部分,因此跳过在'commentstring'那里添加。

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

setlocal comments-=mb:*

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


推荐阅读