我主要使用vim/gvim作为一个编辑和我在寻找使用一个组合 lxr(Linux的交叉参考) 要么 cscopectags 探索核源。然而,我还没有用 cscopectags 想听听你为什么一个可能选择另一个考虑到我的使用vim作为一个初级编辑器。

有帮助吗?

解决方案

的ctags使两个功能:允许您从函数调用跳转到自己的定义,全方位完成。第一种方法,当你到一个方法的调用,击中g]CTRL-]将会跳转到该方法被定义或实施的地方。第二个特征是指当键入foo.foo->,并且如果foo是一个结构,然后用字段完成的弹出菜单将被显示。

cscope的也具有第一特征 - 使用set cscopetag - 但不是最后一个。然而cscope的另外增加了跳转到任何其中一个函数被调用,以及地方的能力。

至于象周围的代码库跳跃而言,CTAGS仅会带领您驶向何方的功能实现,而cscope将可以告诉你,其中一个函数被调用过的地方。

为什么你会选择一个比其他?好吧,我同时使用。的ctags更易于设置,运行更快,如果你只关心跳的一种方式,它会显示你少线。您可以只运行:!ctags -R .g]只是工作。这也使的是全方位完整的东西。

Cscope的非常适合大,未知的代码库。集合起来是一种痛苦,因为cscope的需要包含文件的名称解析列表的文件。此外在vim,默认情况下也未设定键绑定 - 你需要手动运行:cscope blah blah

要解决这个问题的拳头我有一个bash脚本cscope_gen.sh,看起来像这样:

#!/bin/sh
find . -name '*.py' \
-o -name '*.java' \
-o -iname '*.[CH]' \
-o -name '*.cpp' \
-o -name '*.cc' \
-o -name '*.hpp'  \
> cscope.files

# -b: just build
# -q: create inverted index
cscope -b -q

这将搜索我感兴趣的代码,创建cscope.files列表并创建数据库。这样我可以运行。“!cscope_gen.sh”,而不必记住所有的设置步骤

我映射cscope的搜索到CTRL-空间×2与该片段中,这减轻的cscope的其他唐纳:

nmap <C-@><C-@> :cs find s <C-R>=expand("<cword>")<CR><CR>

此cscope_maps.vim插件的,设置了一串类似的绑定。我永远记得所有选项的意思,所以倾向于坚持CTRL空间。

因此得出结论:ctags的是更容易建立,大多没有做其他很多工作,它是全方位完整的生命了。 cscope的提供更多的功能,如果你要保持大,大部分未知的代码的基础上,但需要更多的腿的工作。

其他提示

我是在同样的情况在几个月前...

缺乏的ctags的精度是在..痛,我发现所有相关的东西宏cscope的更好(也有在Linux内核一堆宏)..

关于使用

,这其实简单的......你只是在你的内核的源类型的cscope -R,然后你有什么好担心的。(我的意思是,如果你只是想探索这是完美的.. 。)

然后,密钥绑定都基于按Ctrl - \(如果你为Ctrl过敏可以重新映射),您主要使用s和g ...,

为内核开发,我并不需要那么多的完成......

反正去cscope的,这是更方便,准确。

嗯......你或许应该使用ETag,而不是CTAGS ...

如果您使用cscope,那么你就可以看到调用链,即谁调用这个函数和其功能,这种功能调用?

我不知道这是可以做到用的ETag / CTAGS ...

这只是一个功能......怎么样找出包含特定函数定义的文件?这个你只能在cscope的。

我使用的两个的cscope的和ETag的,他们都是很好的不同的东西,有一个大的代码库工作特别是,如Linux内核。其实,我开始使用cscope的和ETag的时候,我开始与Linux内核/ Xen的工作。

LXR不是很大,因为你必须点击,去通过网络等,而你可以在你的内核代码,并建立cscope的和标签数据库的不必去通过网络的(不像LXR)。

推荐使用全球gtags。可以使用vim插件 gen_tags 以gtags用vim集成。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top