8

我想将 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()"

是否可以仅使用错误格式来执行此操作,或者我是否需要编写一个脚本来操作输出,然后再将其提供给 Vim?

4

1 回答 1

9

而不是搞乱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
于 2011-07-13T15:11:32.093 回答