Jedi-vim自动完成python3.6 virtualenv无法正常工作

时间:2018-01-24 14:08:08

标签: python vim virtualenv python-3.6

我一直在关注jedi-vim回购的一些问题,我发现: https://github.com/davidhalter/jedi-vim/issues/704https://github.com/davidhalter/jedi/pull/829/files

我试图将我的venv中的lib重命名为python3.5,是的,自动完成工作正常,但是当你运行任何python文件时它已经坏了(我的意思是我更改了名称,所以这很正常)。

对于其他解决方案,我在vundle目录中找不到任何名为jedi/evaluate/sys_path.py的文件。

有没有人有想法做这项工作,我已经搜索了很长一段时间但找不到任何东西。

提前致谢

1 个答案:

答案 0 :(得分:0)

经过很长时间后,我将其与pyenv-virtualenv,vim和jedi一起使用。希望对您有帮助。

首先,我在〜/ .vimrc文件的Vundle块中添加了jedi-vim插件:

set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
...
Plugin 'davidhalter/jedi-vim' 
call vundle#end()            

接下来,我在〜/ .vimrc中添加了以下python3代码,以分别从pyenv / virtualenv目录中搜索和添加软件包。不幸的是,没有activate_this.py脚本可以自动执行此操作

  py3 << EOF
  import os.path
  import sys
  import vim
  import jedi
  if 'VIRTUAL_ENV' in os.environ:
      base = os.environ['VIRTUAL_ENV']
      site_packages = os.path.join(base, 'lib', 'python%s' %  sys.version[:3], 'site-packages')
      prev_sys_path = list(sys.path)
      import site
      site.addsitedir(site_packages)
      sys.real_prefix = sys.prefix
      sys.prefix = base
      # Move the added items to the front of the path:
      new_sys_path = []
      for item in list(sys.path):
          if item not in prev_sys_path:
          new_sys_path.append(item)
          sys.path.remove(item)
      sys.path[:0] = new_sys_path
   EOF

确保您可以在本机Python中运行import jedi和import vim。您可以在终端中使用以下命令安装它们:

pip3 -install jedi and 
pip3 -install vim

最后,我在vimrc文件中设置以下值:

set omnifunc=jedi#completions
let g:jedi#force_py_version = '3'

在启动vim之前,请确保使用pyenv activate切换到pyenv环境。只有在此之后,自动填充功能才能起作用。