Vim taglist插件显示两次C ++标签

时间:2011-10-20 06:54:43

标签: c++ vim tags ctags taglist

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

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

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

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

  

为每个标记包含[s]额外的类限定标记条目,该标记是类的成员(对于提取此信息的语言;当前为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'

1 个答案:

答案 0 :(得分:3)

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

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

希望这篇文章对任何有同样问题的人都会派上用场!