Vim:使自动完成更智能
我使用ctags,taglist等在Vim中自动完成。 但是,与Visual Studio intellisense或Eclipse自动完成相比,它是非常有限的。 我想知道是否有可能调整Vim:
-
每当显示自动完成。 或 – >键入。 但是只能在一些可能是variables的文本之后(例如,避免在数字之后显示自动完成)。
-
(键入时显示function参数。
-
停止删除自动完成列表时,有些删除后的所有字符。 或 – >:inputvariables名称时,按。 或 – >search某个成员,我经常必须删除所有我input的字符。 或 – >,但是这使得Vim隐藏了自动完成列表。 我想保持它可见,除非我按Esc。
-
显示相关的自动完成:当我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的自动完成工具类似。 示范可以在这里看到:
无论如何,我推荐YouCompleteMe(YCM) 。 它提供(模糊)匹配您当前文件的标识符,以及path完成,与外部完成引擎的集成,…
广告1)
如果您喜欢eclipse的语义完成,请使用eclim将vim与eclipse集成。 (为YCM另外使用另一个语义引擎)
广告2)
这两个很好地结合在一起:YCM甚至可以提供最近完成的function的函数定义(=参数列表)!
广告3)
这就是YCM所做的
广告4)
不太确定,你的意思是那个。 从来没有使用ctags!
PS:我强烈推荐使用UltiSnips和Tagbar (如果你喜欢UndoTree ),那么vim是一个完美的IDE。