我在 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:*
部分。
To avoid recognizing "*ptr" as a comment, the middle string includes the 'b' flag.
不幸的是,你编写指针的方式(*
后面的空格)破坏了这个启发式,Vim将*
检测为三部分的中间部分注释(Vim 不会验证它之前是否确实有一个开始部分),假设折叠开始已经是注释的一部分,因此跳过在那里添加 'commentstring'
。
要解决此问题,请调整您的编码风格(编写 void *bar
),或修改 'comments'
选项,例如通过删除(或精炼,如果您使用它)中间部分:
setlocal comments-=mb:*
如果您需要保留中间部分和正确的手动折叠,则必须围绕 zf
编写一个小的包装器映射来临时更改选项。
关于c - 当函数定义包含 `fold-create-marker` 时,默认 `{{{` 标记的 `*` 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53622771/