c - 当函数定义包含 `fold-create-marker` 时,默认 `{{{` 标记的 `*` 无法正常工作

标签 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 也能正常工作?

最佳答案

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

关于c - 当函数定义包含 `fold-create-marker` 时,默认 `{{{` 标记的 `*` 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53622771/

相关文章:

android-studio - 在Android Studio中使用//region折叠错误

editor - 你如何在 sublime 3 中通过缩进折叠代码?

c - Sleep() 或 sleep() 有多准确

vim - 包括文件名的领导者映射

vim - vim 中的 256 种颜色以及如何安装新的配色方案

xml - Notepad++ 默认折叠所有标签?

c - 取消引用整数数组的指针

c - Linux 删除 root 权限 - C 脚本

c - C 中大数的因式分解

bash - 自动执行 key 序列以恢复卡住的 SSH session