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

Tha*_* DK 7 vim errorformat cscope

我想将输出从cscope重定向到Vim quickfix窗口.胶水部分很容易,但我目前陷入错误格式.以下是cscope输出的示例(cscope -L -1 bar):

Format: "filename scope linenumber sourceline"
Example: "abc.cpp foo 25 bar()"
Run Code Online (Sandbox Code Playgroud)

这意味着在foo()中,在abc.cpp的第25行,调用bar().

efm = %f\ %*[^\ ]\ %l\ %m但工作但范围信息丢失.例如:

Input: "abc.cpp foo 25 bar()" becomes
Output: "abc.cpp |25| bar()"
Run Code Online (Sandbox Code Playgroud)

我想要的是在quickfix窗口中包含范围,如下所示:

Input: "abc.cpp foo 25 bar()" becomes
Output: "abc.cpp |25| bar() inside foo()"
Run Code Online (Sandbox Code Playgroud)

是否可以仅使用errorformat执行此操作,或者是否需要编写脚本来操作输出,然后再将其输送到Vim?

Has*_*kun 8

而不是搞乱errorformat,只需设置cscopequickfix和使用正常:cscope命令.例如.(来自vim帮助)

:set cscopequickfix=s-,c-,d-,i-,t-,e-
Run Code Online (Sandbox Code Playgroud)

编辑

您还可以使用以下过滤器对字段进行重新排序

sed -e 's/^\([^ ]\+\) \([^ ]\+\) \([^ ]\+\) \(.*\)$/\1 \3 \4 inside \2/'
Run Code Online (Sandbox Code Playgroud)

设置它来过滤你的消息,然后使用 efm

errorformat=%f\ %l\ %m
Run Code Online (Sandbox Code Playgroud)

  • 要使用 cscopequifix,您需要禁用 QuickFix 模块。请节省其他人将其添加到您的答案中的时间。 (2认同)