Python 3的Vim代码完成


26

我正在运行Debian Jessie并使用当前的vim-nox(带有+ python -python3)。我在尝试使用Python 3编程时遇到了困难,因为我在处理Python 3代码完成方面遇到困难。

YouCompleteMe完全不支持Python3。jedi-vim确实支持Python 3补全功能,但前提是我正确理解了+ python3选项。从Debian Developers的几篇文章中看来,用+ python3标志编译Vim确实没有用。因此,我剩下了python-mode插件。

除了python-mode似乎无法维护(请参阅打开的pull-requests和最后的提交)并且当前在其master分支中存在有关绳索的巨大错误外,它还会干扰YouCompleteMe。我确实可以使用一些Python 3代码完成功能,但前提是必须完全禁用YouCompleteMe。将python文件类型的YCM列入黑名单或禁用python文件的YCM完成不起作用,每次打开vim时都会收到一条YCM警告。

所以我的问题是:

如何在不停用YouCompleteMe(我希望用于其他编程语言)的情况下,使Python 3自动补全功能在当前的Debian发行版上工作?对于如此重要​​的编程语言(Python 3不再被认为是新的。),为什么目前无法维护的插件是代码完成的唯一选择?


2
“对于如此重要​​的编程语言,目前无法完成代码的唯一选择是如何选择一个无需维护的插件 ”->几乎没有Python 3专用项目,几乎所有Python程序都可以在Python 2和3上正常运行,因此Python 2完成应该对几乎每个人都有利。
马丁·图尔诺伊

同意@Carpetsmoker。Vim开箱即用,带有Python补全功能,它也可以与Python3配合使用。实际上,我使用的是Vim内置的默认pythoncomplete。没有YCM,没有Jedi-vim,没有Python模式。如果您仍然想要+ python3,请参阅我的答案
akshay 2015年

我刚刚签出pythoncomplete,我不知道该脚本包含在普通的vim安装中。那绝对是个不错的基本选择。您是否偶然知道pythoncomplete在函数调用中添加方括号的简单方法(例如print(''))?
xt440 2015年

我认为您必须自己修改。可以在vim.org上找到源:vim.org/scripts/script.php ? script_id= 1542。诚然,它已经很旧了,但是对我来说效果很好。
akshay 2015年

Answers:


17

理想的方法是获取Vim的源代码并自己进行编译。

步骤1:对于类似Debian的系统,获取所需的软件包:

sudo apt-get build-dep vim

步骤2:克隆Vim的源代码:

cd /tmp && git clone https://github.com/vim/vim.git && cd vim

步骤3:配置,制作,安装

./configure --with-features=huge --enable-multibyte --enable-python3interp \
    --enable-gui=gtk-2 --prefix=/usr

make VIMRUNTIMEDIR=/usr/share/vim/vim74
sudo make install

步骤4:完成!您应该有一个带有+ python3支持的vim巨大版本。它还具有+ clipboard支持,因此您可以将其与系统剪贴板和gui版本一起使用。

当然,你可以删除你不想要配置标志或添加一些英寸YouCompleteMe实际上有专门解释如何从源代码编译Vim的一个相当长的wiki 在这里


感谢您的快速答复。我能够用+ python3 / dyn和+ python / dyn支持构建vim。但这不能解决我的问题。一旦我启动vim,YouCompleteMe即会启动(据我所知,它始终会启动python2)。当我进入时,:echo has('python3')我得到0,而:echo has('python')返回1。.vimrc中有以下选项,但它们无济于事:let g:ycm_path_to_python_interpreter = '/usr/bin/python3 let g:ycm_filetype_specific_completion_to_disable = { 'python' : 1 } let g:ycm_filetype_blacklist = { 'python' : 1 }
xt440,2015年

对于第1步,我建议改为:apt-get build-dep vim
200_success,2015年

@ 200_success,我不确定是否还会拉下剪贴板支持所需的x11内容。我没有随身携带的Linux机器来检查。
akshay

packages.debian.org/jessie/vim中,查看.dsc侧边栏中链接的文件。我相信,您建议的所有软件包(除之外mercurial)都直接或通过列为Build-Depends。特别是,libgnomeui-dev可能是其中许多依赖项的原因。
200_success 2015年

@ 200_success,足够公平,谢谢!更新了帖子。
akshay

4

jedi-vim现在在vim中对+ python3的支持对我来说工作正常。在增加了以下选项来我的.vimrc: let g:jedi#force_py_version = 3


4

将此内容写成给自己的笔记比什么都重要,但这也许对某些人有用:在Arch Linux上,您可以安装使用python3编译的vim版本:

# pacman -S vim-python3
resolving dependencies...
looking for conflicting packages...
:: vim-python3 and vim are in conflict. Remove vim? [y/N] y

输入y,这将用启用了python3的vim替换现有的vim。

然后:

# pacman -S vim-jedi

将为python3安装自动完成功能。


4

几周以来,YouCompleteMe确实通过JediHTTP包装器支持使用Jedi的Python3完成。根据安装说明仅安装YouCompleteMe(无需安装jedi-vim),并将以下行添加到您的.vimrc

let g:ycm_python_binary_path = '/usr/bin/python3'

这将强制YCM将Jedi与Python3一起使用(默认是将Jedi与ycmd服务器使用的同一Python解释器(Python2)一起使用)。

无论您的Vim是否编译带有或不带有+python3标志,此方法都有效-您将获得Python3自动补全功能(以及查找文档的更多信息)。


1

我处于必须经常在两个python项目之间进行切换的位置,一个使用python 2,另一个使用python3。正如您所指出的,youcompleteme不适用于python 3。

首先,我使用python 3编译了vim的另一个版本(我以vim3开头),然后使用vundle作为插件管理器。

在我的.vimrc文件中,我有:

Plugin 'davidhalter/jedi-vim' " for python3
Plugin 'Valloric/YouCompleteMe' " for python2


if has('python3')
    let g:loaded_youcompleteme = 1 " disables loading it! doesnt support python3
    let g:jedi#force_py_version = 3
    let g:pymode_python = 'python3'

当我运行vim3时,它会禁用youcompleteme,但是我有jedi-vim自动完成功能。我只是刚刚开始使用它,这篇博客文章说它们并不兼容,但是对我来说,自动完成功能在这两个领域中都是有效的,jedi的go-to-definition作品,python-mode的pylint作品,并且没有插件抱怨启动。到目前为止一切都很好:)


0

如果您对neovim开放,请使用deoplete和deoplete-jedi。以我的经验,这在YCM有点麻烦的地方效果很好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.