【问题标题】:Is VIM omni-completion really so limited? Or am I missing something?VIM全能补全真的那么有限吗?还是我错过了什么?
【发布时间】:2011-06-17 00:09:54
【问题描述】:

鲁比:

file = File.new("some.txt", "r")
lines = file.readlines

全方位完成测试

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

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

lines.
                <-- FAILED (no suggestions)

lines[0].capital
                <-- FAILED (no suggestions)

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

我错过了什么吗?对于 Ruby/Python,智能感知可能会有所改进吗?

【问题讨论】:

  • 这一切都取决于不一定是 vim 设置的一部分的全方位完成脚本。如果走到极端,全方位完成脚本可以处理 Intellisense 处理的任何情况。

标签: vim intellisense omnicomplete


【解决方案1】:

问题在于 Vim 不知道 line 是字符串、数组还是其他类。 Vim 中没有深入的句法分析。 Vim 不知道范围,是否定义了变量或方法等。

它只是建议相似的词。所以是的,Vim 在这方面比 IDE 更受限制。这也是为什么 Eclipse 可以在您输入错误时提示错误,而 Vim 不能。

Vim 更加基本:在某种程度上,一切都是文本,不一定被视为“代码”。

所以你是对的,这是 Vim 的限制之一。

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

【讨论】:

  • +1 - 良好的反应。我还要补充一点,当使用动态语言时,在运行时才知道对象的绑定时,问题会更加复杂。在这些情况下,即使是 IDE 也必须发挥一些作用。
  • 你知道,AFAIK 每个全能补全脚本在某种程度上都是特定于语言的:没有默认的一组。与任何其他插件一样,它们只是第三方脚本。该脚本也可以像 IDE 一样确定范围和类型。
  • @progo :你是对的。我的评论是试图将 Vim 与用于 Java、C# 的特定语言 IDE 进行对比……Vim 是一种通用工具,在某些情况下无法与特定工具竞争。
猜你喜欢
  • 2017-06-26
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
相关资源
最近更新 更多