【问题标题】:How to fix absent Python autocompletion on object instances in Vim?如何修复 Vim 中对象实例上缺少 Python 自动完成?
【发布时间】:2011-10-07 03:59:25
【问题描述】:

当我尝试对对象使用自动完成功能时,我在 Vim 中发现了一个奇怪的行为。如果我在模块级别实例化对象,Vim 自动补全将在我创建的实例上工作:

如果我在函数或类中尝试相同的方法,它不再起作用:

有谁知道如何解决这个问题,或者有没有办法让omnicompletion 在非模块范围内的实例上工作?

【问题讨论】:

  • 并不是说这对您有帮助,但它在 7.3.56 上对我来说可以正常工作。我的 vimrc 中没有针对 omnicomplete 的特殊非默认处理。
  • 我刚刚从源代码 (7.3.254) 编译了较新版本的 VIM,但问题仍然存在 - 我在 Linux Mint 11 上使用 VIM - 也许问题与操作系统有关?
  • 转念一想它对我不起作用。在我的第一个测试中,h 是在函数范围之外定义的,然后又在同一个文件的函数范围中定义。如果我在函数范围内定义了一个不同的变量y,我没有得到自动完成。

标签: python vim autocomplete


【解决方案1】:

即使它不使用 Vim 的omnicompletion 插件,通过使用rope、ropemode 和ropevim 也可以在方法中获得自动完成功能:

虽然不是我想要的,但效果很好。

我让它像这样工作: 我从here 安装了ropevim 发行版,并将以下几行添加到我的.vimrc 文件中:

" Rope AutoComplete
let ropevim_vim_completion = 1
let ropevim_extended_complete = 1
let g:ropevim_autoimport_modules = ["os.*", "traceback", "django.*",  "xml.etree"]
imap <c-space> <C-R>=RopeCodeAssistInsertMode()<CR>

现在按下 Ctrl+Space 将调出绳索完成菜单。

【讨论】:

  • 嗯,差不多了……只是想找到底层函数,这样我就可以将它设置为我的完成函数,这样它就会与全完成功能联系起来,那就完美了!
  • 好的,我是一个皈依者。在对键绑定和选项进行了更多设置和摆弄之后,我很高兴 - 完成似乎比内置的 pythoncomplete 强大得多,甚至可以在一些更复杂的情况下完成。这也给了我一个更清楚的理由来尝试使用rop 的一些更复杂的重构功能。
  • 没错 - 绳子很漂亮很棒,我也开始发现这一点。然而,有时omnicompletions 似乎要好一些——尤其是因为ropecompletion 总是自动选择第一个条目,我觉得这有点烦人。
  • 是的,它似乎忽略了我通常使用的 completeopt+=longest 设置,这很可惜。我会继续挖掘,但ropevim.py 很难理解。此外,重构函数(我一直在尝试提取方法)似乎会引发很多错误,我想我需要一些练习!无论哪种方式,我认为这值得赏金......尽管告诉我你想出的任何其他技巧:-)
  • 抱歉挖掘了一个旧线程..但没有找到更好的上下文。你有没有让ropevim尊重completeopt+=longest设置?
【解决方案2】:

扩展@BergmannF 答案。如果您不希望 rope's completion 选择第一个条目,只需将 &lt;C-P&gt;(转到上一个条目 -> 无条目)附加到 imap 命令:

imap <C-Space> <C-R>=RopeCodeAssistInsertMode()<CR><C-P>

【讨论】:

    【解决方案3】:

    我必须使用以下行来让 ctrl+space 工作

    imap <Nul> <C-R>=RopeCodeAssistInsertMode()<CR>
    

    【讨论】:

      猜你喜欢
      • 2015-11-24
      • 2011-09-04
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      相关资源
      最近更新 更多