Vim:让自动完成变得更加智能

Raf*_*fid 73 vim autocomplete

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

  1. 随时显示自动完成.或 - >键入.但只有在某些文本可能是变量之后(例如,避免在数字后显示自动完成).

  2. 显示函数参数(键入时).

  3. 当有些人删除所有字符后停止删除自动完成列表.或 - >:当我输入变量名称时,然后按.或者 - >要搜索某个成员,我经常要删除我输入的所有字符.或 - >,但这使得Vim隐藏了自动完成列表.除非我按下Esc,否则我想让它保持可见.

  4. 显示相关的自动完成:当我键入变量并按^ X ^ O时,它通常会显示ctags文件中的所有标记.我想让它只显示与变量相关的标签.

谢谢您的帮助.

编辑:有些人投票支持这个问题,但似乎没有人知道答案.所以只想提一下,你不必提供完整的答案; 对上述任何一点的部分答案也会很好.

rom*_*inl 21

AutoComplPop是您所需要的.


Ben*_*ier 15

对于(1)使用C++或C时,这clang complete是一个非常好的选择


uno*_*ode 8

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

例如,要映射键.以在INSERT模式下调用某种类型的完成,您需要执行以下操作:

:inoremap <expr> <buffer> . MyFunction()
Run Code Online (Sandbox Code Playgroud)

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

编辑:这是clang complete@honk提到的工作方式的基础.

我不确定你是否可以自定义omnifunc的行为以满足你的需求,但根据我的经验,我从未走得太远.正如@Mikhail所说,你需要跟踪在某种程度上解释甚至运行代码的事情.


Mik*_*ail 5

我每天都使用vim,而且我不知道任何现有的脚本可能会这样做.此操作需要了解类并跟踪变量.someObject->意味着VIM会知道变量someObject是什么类,然后能够搜索该类中的方法/变量.

为vim编写脚本相对容易,但就像你评论过的那样 - 还没有人回答这个问题.从我这里投票.