3

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

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

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

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

任何想法将不胜感激!

干杯,

想过。

4

2 回答 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弹出菜单之前将标签设置更改为指向“omni”标签,第二行在插入模式之后的下一个左侧时将标签设置重置为“vim”标签弹出窗口已关闭。

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

我仍然想做两个改进:

  1. 将“omni”标签的设置映射到omnicomplete CX,CO 命令而不是新的F8 映射。(我想我需要设置标签,然后调用omni#cpp#maycomplete#Complete(),但我不知道该怎么做)
  2. 将“vim”标签的重置与omnicomplete本身完成或弹出菜单关闭挂钩

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

干杯,

想过。

于 2010-02-12T16:57:19.107 回答
0

你可以试试OmniCppComplete插件。

于 2010-02-11T19:08:46.443 回答