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

发布于 2024-11-19 23:11:43 字数 605 浏览 1 评论 0原文

我想将输出从 cscope 重定向到 Vim 快速修复窗口。粘合部分很简单,但我目前陷入了错误格式。下面是 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()"

我想要的是将范围包含在快速修复窗口中,如下所示:

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

是否可以仅使用错误格式来执行此操作,或者我是否需要编写一个脚本来操作输出,然后再将其提供给Vim?

I want to redirect output from cscope to Vim quickfix window. The glue part is easy enough, but I currently stuck at errorformat. Here's an example from cscope output (cscope -L -1 bar):

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

This means inside foo(), at line 25 in abc.cpp there is a call to bar().

efm = %f\ %*[^\ ]\ %l\ %m works but the scope information is lost. For example:

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

What I want is to include the scope in quickfix window, like this:

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

Is it possible to do this with errorformat only, or do I need to write a script to manipulate the output before feeding it to Vim?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深居我梦 2024-11-26 23:11:43

无需搞乱 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

Instead of messing about with errorformat, just set cscopequickfix and use the normal :cscope commands. eg. (from vim help)

:set cscopequickfix=s-,c-,d-,i-,t-,e-

Edit

You could also use a filter like the following to reorder the fields

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

set it to filter your message, then use the efm

errorformat=%f\ %l\ %m
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文