【问题标题】:`fold-create-marker` with default `{{{` marker not working properly when function definition contains `*`当函数定义包含“*”时,带有默认“{{{”标记的“fold-create-marker”无法正常工作
【发布时间】:2019-05-06 11:02:20
【问题描述】:

我在 vim 中有这个设置

foldmarker={{{,}}}
commentstring=/*%s*/
foldmethod=marker

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

void foo(void bar) {
}

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

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

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

void foo(void * bar) {
}

我明白了

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

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

【问题讨论】:

    标签: c vim folding


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2018-09-05
      • 2019-03-28
      • 2012-05-20
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      相关资源
      最近更新 更多