当函数定义包含“*”时,带有默认“{{{”标记的“折叠创建标记”无法正常工作
`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:*
部分。
To avoid recognizing "*ptr" as a comment, the middle string includes the 'b' flag.
不幸的是,您编写指针的方式(*
之后的空白)打败了这种启发式方法,并且 Vim 将 *
检测为三件式的中间件评论(Vim 不验证它之前是否确实有开始部分),假设折叠开始已经是评论的一部分,因此跳过在那里添加 'commentstring'
。
要解决此问题,请调整您的编码风格(编写 void *bar
),或修改 'comments'
选项,例如通过删除(或精炼,如果你使用它)中间部分:
setlocal comments-=mb:*
如果您需要保持中间部分 和 正确的手动折叠,您必须围绕 zf
编写一个小的包装映射来临时更改选项。
我在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
编写一个小的包装映射来临时更改选项。