我多年来一直在Vim中使用ctags,但我刚刚发现了omnicomplete。 (看起来不错。)
但是,我有一个问题:要使omnicomplete正常工作,我必须在生成标签时使用--extra = + q选项,这很好,但这会改变一般标签浏览的行为,方式是我不喜欢。
例如,当在Vim中完成标签名称标签时,我不想将“标签”标记为类的“层次结构” - 也就是说,当标签完成“Clas”时,获得“ClassA,ClassA :: var1,ClassA” :: var2,ClassB“,而不是”ClassA,ClassB“ - 但这就是使用--extra = + q时会发生的情况。
所以我猜我是在追求两件事之一。或者: 1.即使这些层次结构确实存在于标记文件中,也能够禁用制表符到“标记层次结构”。要么, 2.能够使用不同名称的标签文件(即使用不同选项生成)进行omnicomplete和一般标签浏览。
任何想法都会非常感激!
干杯,
thoughton。
答案 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”标记弹出窗口关闭后离开。
需要进行广泛的使用才能确保它足够强大,但经过一些快速测试后似乎确实有效。
我还想做两个改进:
无论如何,我以为我会分享。
干杯,
thoughton。
答案 1 :(得分:0)
您可以尝试OmniCppComplete插件。