C++ 是否可以在Vim中使用不同的标记文件进行全方位和常规标记浏览?

C++ 是否可以在Vim中使用不同的标记文件进行全方位和常规标记浏览?,c++,vim,tags,ctags,omnicomplete,C++,Vim,Tags,Ctags,Omnicomplete,我已经在Vim中使用CTAG很多年了,但我刚刚发现omnicomplete。(看起来不错。) 但是,我有一个问题:为了让omnicomplete正常工作,我必须在生成标记时使用--extra=+q选项,这很好,但是这会以我不喜欢的方式改变常规标记浏览的行为 例如,在Vim中,当制表符完成标记名时,我不想将“标记”到类的“层次结构”中——也就是说,当制表符完成“Clas”时,得到的是“ClassA,ClassA::var1,ClassA::var2,ClassB”,而不是“ClassA,Class

我已经在Vim中使用CTAG很多年了,但我刚刚发现omnicomplete。(看起来不错。)

但是,我有一个问题:为了让omnicomplete正常工作,我必须在生成标记时使用--extra=+q选项,这很好,但是这会以我不喜欢的方式改变常规标记浏览的行为

例如,在Vim中,当制表符完成标记名时,我不想将“标记”到类的“层次结构”中——也就是说,当制表符完成“Clas”时,得到的是“ClassA,ClassA::var1,ClassA::var2,ClassB”,而不是“ClassA,ClassB”——但使用--extra=+q时会发生这种情况

所以我想我在追求两件事中的一件。要么: 1.即使标签文件中确实存在标签层次结构,也可以禁用标签填充到“标签层次结构”中。或 2.能够使用不同命名的标签文件(即使用不同的选项生成)进行全方位和通用的标签浏览

任何想法都将不胜感激

干杯


thoughton.

你可以试试这个插件。

好的,我想我已经找到了我自己问题的答案

首先,我生成两个标记文件:tags_c_vim和tags_c_omni

在我的vimrc中,我有:

let tags_vim='tags_c_vim'
let tags_omni='tags_c_omni'

exe "set tags=".tags_vim
设置指向不同标签文件的一些变量,并将“vim”标签设置为默认标签

然后我也有这个,同样在_vimrc中:

imap <F8> <ESC>:exe "set tags=".tags_omni<CR>a<C-X><C-O>
autocmd InsertLeave * if pumvisible() == 0|exe "set tags=".tags_vim|endif
imap:exe“set tags=“.tags\u omnia”
autocmd InsertLeave*if pumvisible()==0 | exe“set tags=“.tags_vim|endif
这里的第一行映射F8,因此在调用omnicomplete弹出菜单之前,它将标记设置更改为指向“omni”标记,第二行在弹出窗口关闭后的下一个左侧插入模式时,将标记设置重置为“vim”标记

它将需要一些广泛的使用,以确保它足够健壮,但经过一些快速测试后,它似乎确实可以工作

我仍然想做两个改进:

  • 将“omni”标记的设置映射到omnicomplete C-X,C-O命令,而不是新的F8映射。(我想我需要设置标记,然后调用omni#cpp#maycomplete#Complete(),但我不知道如何执行此操作)
  • 将“vim”标签的重置挂接到omnicomplete自身完成或弹出菜单关闭中
  • 不管怎样,我只是想分享一下

    干杯


    thoughton.

    我的原始信息可能不清楚,但我已经在使用OmniCppComplete插件。我在帮助中搜索了一下,看看是否有人支持我所需要的东西,但我似乎找不到任何东西。你知道有什么不同吗?我用它的时候就是这样。确保你是用而不是或来完成。我还设置了以下选项:让OmniCpp_MayCompleteScope=1让OmniCpp_ShowScopeInAbbr=1让OmniCpp_ShowPrototypeInAbbr=1,但这些选项不会改变任何内容。