VIM全方位完成真的如此有限吗?或者我错过了什么?

ale*_*2k8 7 vim intellisense omnicomplete

红宝石:

file = File.new("some.txt", "r")
lines = file.readlines
Run Code Online (Sandbox Code Playgroud)

全方位测试

file.readl
   ---------
   readline     <- PASSED
   readlines
   ---------

"hola".capital
   ---------
   capitalize   <- PASSED
   capitalize!
   ---------

lines.
                <-- FAILED (no suggestions)

lines[0].capital
                <-- FAILED (no suggestions)
Run Code Online (Sandbox Code Playgroud)

我也试过Python,它也以类似的方式工作.所以看起来omni-completion不能用于真正的开发,因为它在非常简单的情况下失败了?

我错过了什么吗?可能是intellisense可以改进一些如何为Ruby/Python?

Xav*_* T. 10

问题是Vim不知道line是String,Array还是其他Class.在Vim中没有深入的语法分析.如果定义了变量或方法,Vim不知道范围等.

它只是暗示类似的词.所以是的,在这方面,Vim比IDE更受限制.这也是Eclipse在键入错误时可以提出错误的原因,而Vim则不能.

Vim更基本:在某种程度上,一切都是文本,而不一定被视为"代码".

所以你说得对,这是Vim限制之一.

有一些插件可以解决这些限制(omnicpp使用ctags来确定某些方法的范围),但它们通常是基于每种语言开发的,并且没有灵丹妙药.

  • 你知道,AFAIK的每个omni完成脚本都是特定于语言的:没有默认的一套.它们只是脚本,第三方,和任何其他插件一样.该脚本可以像IDE一样确定范围和类型. (3认同)