如何将cscope输出放入Vim quickfix窗口?

时间:2011-07-13 10:52:56

标签: vim cscope errorformat

我想将输出从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之前是否需要编写脚本来操作输出?

1 个答案:

答案 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