【问题标题】:Vim taglist plugin displays C++ tags twiceVim taglist 插件显示 C++ 标签两次
【发布时间】:2011-10-25 17:48:34
【问题描述】:

我正在使用 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'

【问题讨论】:

  • 答案正盯着我看!我没有意识到 taglist 实际上每次都在运行它自己的 ctags,而不仅仅是使用我的标签文件。我需要做的就是在 taglist 的 ctags 命令中显式禁用那些 C++ 特定设置,因此: let Tlist_Ctags_Cmd = 'ctags --extra=-q --c++-kinds=-p' 希望这篇文章对任何有同样的问题!
  • @danielpwright:是的,这是一个常见的陷阱,但是,请回答您自己的问题,以便您可以将其标记为已接受 - 其他人更容易看到问题已得到回答并进行搜索寻找答案
  • @sehe 注意到了!我想我打算这样做,但是作为一个新用户,在发布它或其他东西后七个小时内不允许回答我自己的问题。无论如何,我在下面添加了答案。

标签: c++ vim tags ctags taglist


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    相关资源
    最近更新 更多