如何将cscope输出放入Vim快速修复窗口?

8

我希望能够将cscope的输出重定向到Vim的快速修复窗口。粘合部分很容易,但我目前卡在了错误格式上。以下是来自cscope输出的示例(cscope -L -1 bar):

Format: "filename scope linenumber sourceline"
Example: "abc.cpp foo 25 bar()"

这意味着在abc.cpp文件的第25行,foo()函数内部调用了bar()函数。

efm = %f\ %*[^\ ]\ %l\ %m是可行的,但是范围信息会丢失。例如:

Input: "abc.cpp foo 25 bar()" becomes
Output: "abc.cpp |25| bar()"

我希望在quickfix窗口中包含范围,就像这样:
```html

我希望在quickfix窗口中包含范围,就像这样:

```
Input: "abc.cpp foo 25 bar()" becomes
Output: "abc.cpp |25| bar() inside foo()"

只用errorformat能否完成这个功能,还是我需要编写一个脚本来处理输出结果再将其传递给Vim?


这可能会有所帮助,所以我在这里提供:可以使用:cex将程序的输出连接到Vim快速修复中。例如::cex system("cscope -L -1 " . expand("<cword>"))<CR>。个人而言,我将其与cppcheck和vera++一起使用,用于C ++代码的静态分析。 - Thanh DK
1个回答

10

不要糊弄 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

谢谢,我之前不知道cscopequickfix。这似乎很好用,所以给你点赞。然而,这仍然没有回答我的问题,即如何将输出与errorformat匹配。它可以帮助连接其他程序的输出,其中没有内置的功能。 - Thanh DK
@ThanhDK:我已经添加了一个小过滤脚本,用来实现你想要的功能,这也是 vim 帮助建议的做法,如果消息不适合格式字符串的话。 - Hasturkun
2
使用cscopequifix,您需要禁用quickfix模块。请节省时间,不要在回答中添加其他内容。 - MaikoID

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接