c ++,cscope,ctags和vim:查找从这个继承的类

Mat*_*gan 5 c++ vim ctags cscope

在具有几个层的相当大的代码库中,是否有一种方法可以在vim中或从命令行中找到从基类派生的所有类?grep是一个选项但可能很慢,因为grep没有索引.

rom*_*inl 4

cscope 和 ctags 都不允许我们直接处理继承,但解决该限制相对容易,因为派生类也被索引。

范围

在cscope中,查找“C符号”Foobar通常会列出原始类继承自它的类。由于搜索是针对数据库完成的,因此速度快如闪电。

或者,您可以使用 cscope 的 egrep 搜索功能以及:.*Foobar列出继承自.Foobar

所以,即使我们没有专门的“查找继承自该类的类”命令,我们也可以不费吹灰之力就完成工作。

标签

虽然 ctags 允许您使用 包含继承信息--fields=+i,但该信息不能直接在 Vim 中使用。不过,该inherits字段是由 Vim 解析的,因此可以使用taglist().

确认, 股份公司

这两个程序的工作方式或多或少类似于 grep,但它们的目标是在源代码中搜索,因此它们确实比 grep 更快。

在我的 Vim 配置中,:grep设置为运行ag程序而不是默认值grep,因此搜索从光标下的类派生的类将如下所示:

:grep :.*<C-r><C-w><CR>
Run Code Online (Sandbox Code Playgroud)

以下是我的相关行~/.vimrc

if executable("ag")
  set grepprg=ag\ --nogroup\ --nocolor\ --ignore-case\ --column
  set grepformat=%f:%l:%c:%m,%f:%l:%m
endif
Run Code Online (Sandbox Code Playgroud)