【问题标题】:Vim autocomplete for Python用于 Python 的 Vim 自动完成功能
【发布时间】:2011-10-31 13:40:07
【问题描述】:

我正在尝试在Vim 中加入一个自动完成功能。我使用过 Vim 的全补全功能以及 Pydiction。但在这两种情况下都会弹出这条消息:

未找到全方位补全 (^O^N^P) 模式

我已经尝试过Vim's Omnicompletion with Python just doesn't work。但这无济于事。有解决方法吗?

【问题讨论】:

  • 你看到这个链接了吗? blog.dispatched.ch/2009/05/24/vim-as-python-ide
  • 文件是否被检测为python文件?打开它并运行:echo &ft。如果这没有返回“python”,那么尝试将 'filetype plugin on' 添加到您的 vimrc 并再次尝试所有这些。
  • 旧问题:Getting proper code completion for Python on Vim? - Stack Overflow 带有一些(旧)插件。 — ■ 没有真正回答这个特别的 问题,但如果你已经在使用jupyter-vim,请查看我的包jupyter-vim-complete,它会根据内核的运行时状态完成。

标签: python vim


【解决方案1】:

试试Jedihttps://github.com/davidhalter/jedi-vim 有一个 Vim 插件。

它比 Vim 中的 Python 工作得更好。它甚至支持重命名、goto 等。最好的部分可能是它真正尝试理解您的代码(装饰器、生成器等。只需查看功能列表)。

【讨论】:

  • 我需要知道错误和:ver 然后。如果您没有安装带有 +python 的 vim(例如某些 windows vim 版本),则可能会发生这种情况。
  • 错误:Vim: 捕捉到致命信号 SEGV Vim: Finished。分段错误
  • 是的,我很抱歉。但这是一个 VIM 问题(旧版本):github.com/davidhalter/jedi-vim/issues/27
  • 使用Vundle 安装它。像魅力一样工作!
【解决方案2】:

如果您想要 python 补全以及其他语言,这可能是一个不错的选择。 https://github.com/Valloric/YouCompleteMe

python 补全是基于 jedi 的,与 jedi-vim 相同。

【讨论】:

    【解决方案3】:

    正如 cmets 所指出的,这个答案已经过时了。 youcompleteme 现在支持 python3 并且jedi-vim 不再破坏撤消历史记录。

    原始答案如下。


    AFAIK 有三个选项,每个选项都有其缺点:

    1. youcompleteme:安装不友好,但如果你设法让它工作,它会很好。但是,python3不支持
    2. jedi-vim:最酷的名字,但打破了你的undo history
    3. python-mode 做了很多自动完成功能:折叠、语法检查、突出显示。就我个人而言,我更喜欢能做好一件事的脚本,因为它们更容易管理(和替换)。与其他两个选项不同的是,它使用rope 而不是jedi 进行自动补全。

    Python 3 和撤消历史记录 (gundo!) 对我来说是必须的,所以选项 1 和 2 不可用。

    【讨论】:

    • 感谢您指出缺点,这使选择变得更加容易,因为我同意 Python 3 和撤消的观点。
    • rope 好像不支持 Python 3 (github.com/python-rope/rope/issues/57)?如何在 python-mode 和rope 中使用自动完成功能?谢谢。
    • 这不再准确了。 YouCompleteMe 现在支持 Python 3。
    • 另外,jedi-vim 不再破坏撤消(至少在 vim 8+ 中没有)
    【解决方案4】:

    我尝试了 pydiction(对我不起作用)和正常的全补(太有限)。我按照建议查看了绝地,但发现设置起来太复杂了。我找到了python-mode,最终满足了我的需求。谢谢@klen

    【讨论】:

    • 这是对我有用的。其他工具安装起来太复杂了。
    【解决方案5】:

    我发现coc.nvimpython language server 是一个不错的选择。

    设置需要一些努力。我对 jedi-vim 感到沮丧,因为它在完成时总是会冻结 vim。 coc.nvim 不这样做是因为它是异步的,这意味着 .它还为您的代码提供了 linting。它支持许多其他语言并且高度可配置。

    python 语言服务器使用 jedi,因此您可以得到与 jedi 相同的补全。

    【讨论】:

      【解决方案6】:

      我在 Mac 上使用带有 +python 的 MacPorts vim 遇到了这个问题。问题是 MacPorts vim 只能使用 +python 绑定到 python 2.5,而我的扩展安装在 python 2.7 下。使用 pip-2.5 安装扩展解决了它。

      【讨论】:

        【解决方案7】:

        使用安装coc.nvim包和CocInstall coc-pyright

        如果您使用的是vim-plug

        1. Plug 'neoclide/coc.nvim'
        2. :PlugInstall
        3. CocInstall coc-pyright

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-26
          • 1970-01-01
          • 2016-07-31
          • 1970-01-01
          相关资源
          最近更新 更多