Vim errorformat如何保留非错误行可见且不被识别为错误?
解决Vim快速修复窗口误识别普通行为错误的方案
核心思路
不要使用%-G规则(该规则会直接删除匹配行,无法保留日志上下文),而是在errorformat最前端添加无捕获字段的匹配规则,命中这些规则的行会被判定为普通日志行,保留在快速修复窗口中(自动添加||前缀),且不会被:cnext/:cprev等命令识别为错误条目。
配置方法
Vim的errorformat规则是按顺序匹配的,先命中的规则优先生效。你只需要把要排除的行的匹配规则放在所有错误识别规则之前即可,规则不需要配置%f(文件名)、%l(行号)这类捕获字段,用%*m匹配剩余任意文本即可。
示例1:排除所有编译器命令行
如果要排除所有以cc/gcc/g++开头的编译命令行,添加如下配置:
" 把排除规则加到errorformat最前面 set errorformat^=cc\ %*m set errorformat^=gcc\ %*m set errorformat^=g++\ %*m " 后续保留原有错误识别规则即可,比如gcc的默认规则: set errorformat+=%f\|%l\|%t%*\\a:\ %m
示例2:精准排除带-D参数的误判行
针对你提到的-DVAR="1:2"这类参数导致的误判,可以写更精准的匹配规则:
" 匹配带-D参数的cc命令行,标记为普通日志 set errorformat^=cc\ %*[\ ]-D%*m
效果验证
配置完成后重新执行构建,之前误判的命令行会保留在快速修复窗口中,前缀为||,只有实际的编译错误会被高亮、且能被:cnext等跳转命令识别。
内容的提问来源于stack exchange,提问作者ams
相关产品推荐
相关产品推荐

