2011-07-13 45 views
7

我想将输出从cscope重定向到Vim quickfix窗口。胶水部分很容易,但我目前坚持在errorformat。下面是从cscope的输出的例子(cscope的-L -1巴):如何把cscope输出到Vim quickfix窗口中?

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之前操纵输出?

+0

这可能是有帮助的,所以我只是把这里:一个可以连接程序的输出到Vim quickfix与':cex'。例如:':cex system(“cscope -L -1”。expand(“”))'。就我个人而言,我使用cppcheck和vera ++进行C++代码的静态分析。 –

回答

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 
+0

谢谢,我以前不知道cscopequickfix。这似乎工作得很好顺便说一句,所以upvote给你。但是,这仍然不能回答我的问题,即将输出与errorformat匹配。它可以帮助连接没有内置的其他程序的输出。 –

+0

@ThanhDK:我已经添加了一个小的过滤器脚本来做你想做的事情,这是vim帮你建议你做的事情,如果消息不适合格式字符串 – Hasturkun

+1

使用cscopequifix你需要禁用quickfix模块。节省时间从其他添加到您的答案PLZ。 – MaikoID