C 源代码标记

新手上路,请多包涵

关于标记和搜索 c++ 代码的高质量方式的任何建议。我对大多数东西都使用 cscope/ctags,但我发现它不足以解决一些工作中过于复杂的 c++ 代码。我已经开始从 vim 切换到 Slickedit(仍然不完美,但更好)来浏览代码,但想回到专门的 vim。

我想要的是可以理解类成员范围的东西,例如,如果我搜索对其他类中存在相同成员名称的类成员的引用(并且可能来自 c++ 代码),它只会给出我的相关参考资料。

我更喜欢与 vim 配合得很好的东西,但是任何开源包,比如我可以自己创建一个插件都可以。

任何建议表示赞赏,谢谢。

原文由 Jeff Thomas 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 542
1 个回答

你确定你用正确的选项调用了 ctags 吗?对于 C++,我使用:

ctags --c++-kinds=+p --fields=+iaS --extras=+q --language-force=C++

这就是文档中关于 --c++-kinds=+p 选项的内容:

在解析 C++ 成员函数定义(例如“className::function”)时,ctags 无法确定范围说明符是类名还是命名空间说明符,并且始终将其列为扩展字段的范围部分中的类名。此外,如果 C++ 函数定义在类声明之外(通常情况下),则函数声明中包含的访问规范(即公共、受保护或私有)和实现信息(例如虚拟、纯虚拟)在以下情况下是未知的为函数定义生成标签。但是,它将可用于原型

(例如–c++-kinds=+p)。

--fields=+iaS 选项:

  a   Access (or export) of class members
 i   Inheritance information
 S   Signature of routine (e.g. prototype or parameter list)

--extras=+q 选项:

因为,默认情况下,ctags 只为在源文件中找到的单独标识符生成标签。如果您指定 –extra=+q 选项,则 ctags 还将为每个类成员(数据和函数/方法)生成第二个类限定标签,格式为 C++ 的 class::member 和格式 class .method 用于 Eiffel 和 Java。

--language-force=C++ 选项:

默认情况下,ctags 会自动选择源文件的语言,忽略那些无法确定语言的文件(参见上面的源文件)。此选项强制为每个提供的文件使用指定的语言(不区分大小写;内置或用户定义),而不是根据其扩展名自动选择语言。此外,特殊值 auto 表示应自动选择语言(这实际上禁用了此选项)。

原文由 Ton van den Heuvel 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题