【问题标题】:Need some vim advice on switching to python3需要一些关于切换到 python3 的 vim 建议
【发布时间】:2015-04-23 21:57:27
【问题描述】:

我使用 Vim 作为我所有 Django 项目的主要编辑器/IDE。使用 YouCompleteMe、syntastic 和其他几个插件。体验很棒。

随着世界转向 Py3K,我决定使用 python3 开始所有新项目。但是 vim 在两个版本的 python 上都不能正常运行。

我用两个版本的python编译。

vim --version | grep python
+cryptv          +linebreak       +python/dyn      +viminfo
+cscope          +lispindent      +python3/dyn     +vreplace

YouCompleteMe 还不支持 python3。 jedi-vim 适用于这两个版本,但我不只是做对了。

通常没有任何插件我可以调用任何 py/py3 命令。但是启用jedi-vim它会自动调用系统python2。

我使用 Vundle 作为 vim 插件管理器。

如果您请分享您的 vimrc/其他配置/解决方法以使用 vim 进行 python3 开发(或两个版本),这对我非常有帮助。

谢谢。

【问题讨论】:

  • 这个问题有什么 Django 特有的吗? (例如,YouCompleteMe 是否有额外的功能来支持 Django 项目或其他东西?)如果没有,你应该删除标签;你想从 Python 3.x 和 vim 方面的专家那里得到答案,即使他们对 Django 一无所知。 (顺便说一句,我为你添加了python-3.x 标签,这是你绝对想要的。)
  • 谢谢。我已经删除了 django 标签。
  • 你只用这个来开发python3吗?您是否有任何实际需要 python3 的插件?确保您阅读了:help python-2-and-3,在某些情况下(当符号在解释器中发生冲突时)会导致第二个解释器无法加载。 (只会加载第一个调用的解释器)。看来您只需要问题中的 python (2) 支持。
  • @abarnert 我不明白为什么 vim 需要运行 python 3 插件才能让他编辑 python 3 文件。 (对于 python 2 文件,反之亦然。)编辑器需要 python 来运行插件而不是编辑任何东西。因此,除非他想使用需要 python3 的特定插件,否则我没有理由改变它。我能看到的唯一原因是他是否使用 py3 命令来运行他的 python 3 文件,否则他不需要嵌入式 python3 解释器。 (即使他是我觉得这会不稳定,因为 py3 命令会在调用之间存储状态)。
  • @FDinoff:但他说​​他正在执行pypy3 命令,并且可能需要这样做。事实上,这听起来像是他的全部问题:“通常没有任何插件我可以调用任何 py/py3 命令。但启用 jedi-vim 它会自动调用系统 python2。”

标签: python python-3.x vim


【解决方案1】:

正如其他人在 cmets 中指出的那样,您无需对 Vim 配置进行太多更改即可切换到 Python3。您需要做的是识别使用嵌入式 Python 的插件,找出它们中哪些同时支持 Python2 和 Python3,并告诉他们更喜欢 Python3,并逐步淘汰那些仅适用于 Python2 的插件。

对于我正在使用的插件:

  • 贡多:let g:gundo_prefer_python3 = 1
  • 绝地:let g:jedi#force_py_version = 3
  • syntastic:let g:syntastic_python_python_exec = 'python3',并安装所有检查器的 Python3 版本
  • python 模式:let g:pymode_python = 'python3'
  • YouCompleteMe:不适用于 Python3。

另外,如果您打算使用 pypy3 命令编辑 VimL 文件,也很高兴:安装出色的 SyntaxRange,并将其添加到 after/syntax/vim.vim

call SyntaxRange#Include('\C\v<py\%(thon)?3?\s+\<\<\s*[A-Z]{3,}\zs$', '\C\v^[A-Z]{3,}$', 'python')

【讨论】:

  • 感谢您推荐我的插件!但是内置的 syntax/vim.vim 不是已经支持嵌入式 Python (2/3) 块(可通过 g:vimsyn_embed 配置)吗?
  • @Ingo Karkat:我不知道。显然我有一个干扰它的插件,这就是为什么我没有注意到它应该默认工作的原因。好的,我编辑了我的答案。
【解决方案2】:

对于那些仍然需要切换到 Python 3 的人,这是我发现的。

Vim 可以在 Python 2 和 Python 3 支持下编译,但它只会动态加载 1 个 Python 版本,以先调用者为准。这意味着如果您有一些需要 Python 的插件,第一个要求特定 Python 版本的插件获胜。

那么我们如何强制 vim 加载的 Python 版本呢?我们在任何其他插件之前加载它,将这些行放在 .vimrc 的顶部

if has('python3')
endif

风险自负,因为它可能会破坏您的插件。

【讨论】:

    猜你喜欢
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多