我想将输出从cscope重定向到Vim quickfix窗口。胶水部分很容易,但我目前陷入错误格式。以下是cscope输出的示例(cscope -L -1 bar):
Format: "filename scope linenumber sourceline"
Example: "abc.cpp foo 25 bar()"
这意味着在foo()内,在abc.cpp的第25行,有一个对bar()的调用。
efm = %f\ %*[^\ ]\ %l\ %m
有效但范围信息丢失。例如:
Input: "abc.cpp foo 25 bar()" becomes
Output: "abc.cpp |25| bar()"
我想要的是在quickfix窗口中包含范围,如下所示:
Input: "abc.cpp foo 25 bar()" becomes
Output: "abc.cpp |25| bar() inside foo()"
是否可以仅使用errorformat执行此操作,或者在将输出提供给Vim之前是否需要编写脚本来操作输出?
答案 0 :(得分:8)
不要乱用errorformat
,只需设置cscopequickfix
并使用普通的:cscope
命令。例如。 (来自vim帮助)
:set cscopequickfix=s-,c-,d-,i-,t-,e-
修改
您还可以使用如下所示的过滤器重新排序字段
sed -e 's/^\([^ ]\+\) \([^ ]\+\) \([^ ]\+\) \(.*\)$/\1 \3 \4 inside \2/'
将其设置为过滤您的消息,然后使用efm
errorformat=%f\ %l\ %m