2010-02-11 62 views
3

我一直在Vim中使用ctags多年,但我只发现omnicomplete。 (这看起来不错)。是否有可能在Vim中使用不同的标签文件来实现omnicomplete和一般标签浏览?

但是,我有一个问题:为了让omnicomplete正常工作,我必须在生成标签时使用--extra = + q选项,这很好,但是这会改变行为一般标签浏览方式,我不喜欢。例如,当Vim中的制表符完成标签名称时,我不想标记“进入”类的“层次结构” - 也就是说,当制表符完成“Clas”时,得到“ClassA,ClassA :: var1, ClassA :: var2,ClassB“,而不是”ClassA,ClassB“ - 但是当使用--extra = + q时会发生这种情况。

所以我想我是两件事之一。或者: 1.即使这些层次结构确实存在于标记文件中,也可以将制表符完成禁用到“标记层次结构”中。或者, 2.使用不同名称的标签文件(即,使用不同选项生成)全身和一般标签浏览的功能。

任何想法将不胜感激!

干杯,

斯坦顿。

回答

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弹出菜单前更改标签设置为指向了“全方位”的标签,第二行在弹出窗口关闭后下一次插入模式时将标签设置重置为“vim”标签。

它需要一些广泛的使用来确保它足够强大,但它确实在一些快速测试后工作。

两个方面的改进我还是想作:

  1. 地图的“全方位”标签的设置到omnicomplete C-X,C-O命令,而不是一个新的F8映射。 (我想我需要设置标签,然后调用omni#cpp#maycomplete#Complete(),但我不知道该怎么做)
  2. 将“vim”标签重置为omnicomplete本身整理或弹出菜单关闭

无论如何,我只是想我会分享。

干杯,

斯坦顿。

0

你可以试试OmniCppComplete插件。

+1

我原来的信息中可能没有清楚,但它是我已经使用的OmniCppComplete插件。我已经通过帮助搜索,看看是否有我需要的支持,但我似乎无法找到任何东西。你知道有什么不同吗? – thoughton 2010-02-12 09:50:48

+0

当我使用它时会这样做。请确保您完成而不是。我也有以下选项设置: 让OmniCpp_MayCompleteScope = 1 让OmniCpp_ShowScopeInAbbr = 1 让OmniCpp_ShowPrototypeInAbbr = 1 但是这些不应该改变任何东西。 – m42a 2010-02-13 21:54:05

相关问题