当函数定义包含`*`时,带有默认`{{{``标记的`fold-create-marker`不能正常工作

时间:2018-12-04 23:09:23

标签: c vim folding

我在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即使在第二种情况下也能正常工作?

1 个答案:

答案 0 :(得分:2)

这种奇怪的行为是由: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周围编写一个小的包装映射,以临时更改该选项。