是否可以在Vim中使用不同的标签文件进行omnicomplete和一般标签浏览?

时间:2010-02-11 10:30:15

标签: c++ vim tags ctags omnicomplete

我多年来一直在Vim中使用ctags,但我刚刚发现了omnicomplete。 (看起来不错。)

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

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

所以我猜我是在追求两件事之一。或者:   1.即使这些层次结构确实存在于标记文件中,也能够禁用制表符到“标记层次结构”。要么,   2.能够使用不同名称的标签文件(即使用不同选项生成)进行omnicomplete和一般标签浏览。

任何想法都会非常感激!

干杯,

thoughton。

2 个答案:

答案 0 :(得分:1)

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

首先,我生成两个标签文件: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

此处的第一行映射F8,因此在调用omnicomplete弹出菜单之前将标记设置更改为指向“omni”标记,第二行在下一个插入模式时将标记设置重置为“vim”标记弹出窗口关闭后离开。

需要进行广泛的使用才能确保它足够强大,但经过一些快速测试后似乎确实有效。

我还想做两个改进:

  1. 将“omni”标签的设置映射到omnicomplete C-X,C-O命令,而不是新的F8映射。 (我想我需要设置标签,然后调用omni #cpp#maycomplete#Complete(),但我无法弄清楚如何做到这一点)
  2. 将“vim”标签重置为omnicomplete本身完成或弹出菜单关闭
  3. 无论如何,我以为我会分享。

    干杯,

    thoughton。

答案 1 :(得分:0)

您可以尝试OmniCppComplete插件。