【问题标题】:How to put cscope output in Vim quickfix window?如何将 cscope 输出放在 Vim quickfix 窗口中?
【发布时间】:2011-10-04 09:36:03
【问题描述】:

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

是否可以仅使用 errorformat 来执行此操作,还是我需要编写一个脚本来在将输出提供给 Vim 之前对其进行操作?

【问题讨论】:

  • 这可能会有所帮助,所以我只是放在这里:可以使用:cex 将程序的输出连接到 Vim quickfix。例如::cex system("cscope -L -1 " . expand("<cword>"))<CR>。就个人而言,我将它与 cppcheck 和 vera++ 一起用于 C++ 代码的静态分析。

标签: vim cscope errorformat


【解决方案1】:

不要搞乱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。顺便说一句,这似乎工作正常,所以为你投票。但是,这仍然不能回答我关于将输出与错误格式匹配的问题。它可以帮助连接没有内置的其他程序的输出。
  • @ThanhDK:我添加了一个小的过滤器脚本来做你想做的事,如果消息不符合格式字符串,vim 帮助建议你这样做
  • 要使用 cscopequifix,您需要禁用 quickfix 模块。节省其他时间将其添加到您的答案中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 2012-10-13
  • 1970-01-01
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多