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

如何将cscope输出放入Vim quickfix窗口?,vim,cscope,errorformat,Vim,Cscope,Errorformat,我想将输出从cscope重定向到Vim quickfix窗口。胶水的部分很容易,但我目前坚持错误格式。下面是一个来自cscope输出(cscope-L-1bar)的示例: 这意味着在foo()内部,在abc.cpp的第25行有一个对bar()的调用 efm=%f\%*[^\]\%l\%m工作,但范围信息丢失。例如: Input: "abc.cpp foo 25 bar()" becomes Output: "abc.cpp |25| bar()" 我想在quickfix窗口中包括范围,如下所示

我想将输出从cscope重定向到Vim quickfix窗口。胶水的部分很容易,但我目前坚持错误格式。下面是一个来自cscope输出(cscope-L-1bar)的示例:

这意味着在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之前我是否需要编写一个脚本来操作输出?

不要乱动
errorformat
,只需设置
cscopequickfix
并使用正常的
:cscope
命令即可。例如(来自vim帮助)

编辑

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

sed -e 's/^\([^ ]\+\) \([^ ]\+\) \([^ ]\+\) \(.*\)$/\1 \3 \4 inside \2/'
将其设置为过滤消息,然后使用
efm

errorformat=%f\ %l\ %m

谢谢,我以前不知道cscopequickfix。顺便说一句,这似乎很有效,所以请投你一票。然而,这仍然不能回答我关于将输出与errorformat匹配的问题。它可以帮助连接没有内置程序的其他程序的输出。@ThanhDK:我添加了一个小的筛选脚本来完成您想要做的事情,这就是vim帮助建议您在消息不符合stringto格式的情况下执行的操作。要使用cscopequifix,您需要禁用quickfix模块。节省其他人的时间,将其添加到您的答案plz中。这可能会有帮助,所以我在这里说:可以使用
:cex
将程序的输出连接到Vim quickfix。例如:
:cex系统(“cscope-L-1”。expand(“”)
。个人而言,我使用CPPCHECK和VRA++来进行C++代码的静态分析。
sed -e 's/^\([^ ]\+\) \([^ ]\+\) \([^ ]\+\) \(.*\)$/\1 \3 \4 inside \2/'
errorformat=%f\ %l\ %m