Vim:使自动完成更智能

我使用ctags,taglist等在Vim中自动完成。 但是,与Visual Studio intellisense或Eclipse自动完成相比,它是非常有限的。 我想知道是否有可能调整Vim:

  1. 每当显示自动完成。 或 – >键入。 但是只能在一些可能是variables的文本之后(例如,避免在数字之后显示自动完成)。

  2. (键入时显示function参数。

  3. 停止删除自动完成列表时,有些删除后的所有字符。 或 – >:inputvariables名称时,按。 或 – >search某个成员,我经常必须删除所有我input的字符。 或 – >,但是这使得Vim隐藏了自动完成列表。 我想保持它可见,除非我按Esc。

  4. 显示相关的自动完成:当我input一个variables,然后按^ X ^ O,它通常会显示我ctags文件中的所有标记。 我想让它只显示与variables相关的标签。

谢谢您的帮助。

编辑 :有人正在为这个问题投票,但没有任何机构似乎知道答案。 所以只是想提一下,你不必提供完整的答案; 上述任何一点的部分答案也是好的。

AutoComplPop是你需要的。

对于(1)使用C ++或C clang complete是一个非常好的select

为了使vim在按下某个键时触发某种行为,需要将键映射到一个函数。

例如映射密钥.INSERT模式下调用某种types的完成时,您需要执行以下操作:

 :inoremap <expr> <buffer> . MyFunction() 

然后该函数需要评估被调用的上下文,并向用户提供适当的答案。

编辑 :这是如何clang complete提到的基础工作。

我不确定您是否可以自定义omnifunc的行为来满足您的需求,但根据我的经验,我从来没有做过太多的事情。 正如@Mikhail所说,你需要跟踪一些事实上的解释,甚至在某种程度上运行代码。

我每天使用vim,而且我不知道现有的脚本可能会这样做。 这个行动将需要了解类和跟踪variables。 someObject->意味着VIM会知道variablessomeObject是什么类,然后能够search该类中的方法/variables。

为vim编写脚本相对容易,尽pipe你已经评论过 – 没有人回答这个问题。 从我投票。

我很想拥有你正在寻找的相同function,只是遇到了一个有前途的插件:

https://github.com/Shougo/neocomplcache看起来可能是新autocomplpop,似乎在我最初的试用期间工作得很好;…现在configurationomni完成与scala工作〜

我最近发现了YouCompleteMe ,它的行为和Visual Studio的自动完成工具类似。 示范可以在这里看到:

https://www.youtube.com/watch?v=YuMyHAHF0xs

无论如何,我推荐YouCompleteMe(YCM) 。 它提供(模糊)匹配您当前文件的标识符,以及path完成,与外部完成引擎的集成,…

广告1)
如果您喜欢eclipse的语义完成,请使用eclim将vim与eclipse集成。 (为YCM另外使用另一个语义引擎)

广告2)
这两个很好地结合在一起:YCM甚至可以提供最近完成的function的函数定义(=参数列表)!

广告3)
这就是YCM所做的

广告4)
不太确定,你的意思是那个。 从来没有使用ctags!

PS:我强烈推荐使用UltiSnips和Tagbar (如果你喜欢UndoTree ),那么vim是一个完美的IDE。