c - 当函数定义包含“*”时,带有默认“{{{”标记的“fold-create-marker”无法正常工作
问题描述
我在 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 不验证在它之前实际上有一个开始部分),假设fold start 已经是评论的一部分,因此跳过在'commentstring'
那里添加。
要解决这个问题,要么调整你的编码风格(写void *bar
),要么修改'comments'
选项,例如通过删除(或者如果你使用它,则精炼)中间部分:
setlocal comments-=mb:*
如果您需要保留中间部分并正确手动折叠,则必须编写一个小的包装映射zf
,以暂时更改选项。
推荐阅读
- vb.net - 对 TreeView 节点进行排序
- android - 如果在 Android 设备上为 wifi 启用代理,互联网将无法正常工作
- python-3.x - 执行以下程序时出现“NameError: name 'self' is not defined”
- c# - RijndaelManaged 类在进程转储中存储纯文本密码
- asp.net-core - Quartz - .NET Core - 空引用异常
- python - 如何使用 Python OpenCV 和霍夫线确定箭袋图中箭袋的方向?
- javascript - 函数递归超出最大调用堆栈大小
- java - 实际上是否需要在 mainfest 中添加片段
- python - Reindexing MultiIndex pivot table in Pandas
- typescript - TypeScript - 将装饰对象的类型设置为函数参数