2

我正在使用 vim 的“taglist”插件来导航我的项目中的源文件,但我遇到了一个处理 C++ 文件特有的问题(与 C 相反;这可能发生在其他语言,如 Java)。

对于文件中的每个函数,它将显示两个标签:一个是完全限定的,另一个不是,即:

initialise [()]
ClassName::initialise [()]
update [()]
ClassName::update [()]

等等。这是可以理解的,因为我的 ctags 文件是使用 --extra=+q 生成的,如 ctags 手册页中所述,

为作为类成员的每个标记包含一个额外的类限定标记条目(对于提取此信息的语言;当前为 C++、Eiffel 和 Java)。限定标记的实际形式取决于衍生标记的语言(使用一种最自然的形式,用于在语言中指定限定调用的方式)。对于 C++,它的形式是“class::member”;对于 Eiffel 和 Java,它采用“class.member”的形式。当标签名称多次出现在标签文件中时,这可以允许更容易地定位特定标签。但是请注意,这可能会使标记文件的大小增加一倍以上。

因此,当我使用 Ctrl+] 进行导航等时,此设置对我很有用,所以我更愿意保留它,但我宁愿在 taglist 菜单中删除合格的版本。我已经搜索了答案,但没有找到与此问题相关的任何内容;令人惊讶的是,我认为 OmniCPPComplete 建议使用 --extra=+q 所以我希望许多 C++ 程序员会使用它。

以下是我的 ctags 和 taglist 设置。任何帮助表示赞赏!

〜/ .ctags:

--c++-kinds=+p
--fields=+iaS
--extra=+q

~/.vimrc (提取标签列表设置)

let Tlist_GainFocus_On_ToggleOpen = 1
let Tlist_Process_File_Always = 1
let Tlist_File_Fold_Auto_Close = 0
let Tlist_Enable_Fold_Column = 0
let Tlist_Use_Right_Window = 1
let Tlist_Show_One_File = 1
let Tlist_Ctags_Cmd = 'ctags'
4

1 回答 1

3

答案是盯着我的脸!我没有意识到 taglist 实际上每次都在运行它自己的 ctags,而不仅仅是使用我的标签文件。我需要做的就是明确禁用 taglist 的 ctags 命令中的那些 C++ 特定设置,因此:

let Tlist_Ctags_Cmd = 'ctags --extra=-q --c++-kinds=-p'

希望这篇文章对遇到相同问题的其他人有用!

于 2011-10-25T09:48:34.327 回答