在Vim和Syntastic中切换Python版本
有没有办法改变syntastic用来检查语法的Python版本呢?
根据这个问题 https://github.com/scrooloose/syntastic/issues/385 的内容,我可以使用虚拟环境(virtual-env)。但是,除了虚拟环境,能不能仅仅通过syntastic或者vim的命令来实现呢?
8 个回答
其实不是完全可以,但你可以通过安装这个包来获得关于python3
不兼容的警告。
假设你现在使用的Syntastic Python检查工具是python
,而你想要获取python3
的不兼容警告。在命令模式下,你可以通过以下方式将py3kwarn
添加到g:syntastic_python_checkers
中:
:let g:syntastic_python_checkers=['python', 'py3kwarn']
然后只切换到python2.x
。
:let g:syntastic_python_checkers=['python']
我成功说服Syntastic支持Python 3的语法,方法是:
pip3 install --user flake8
(这样就能让 python3 -m flake8 *.py
这个命令正常工作)然后,在vim中:
let g:syntastic_python_flake8_exec = 'python3'
let g:syntastic_python_flake8_args = ['-m', 'flake8']
尽管这里有很多答案,我还是觉得常见问题解答里的建议最好。我把这个添加到了我的 .vimrc
文件里,这样我就可以轻松地在不同的 Python 版本之间切换。
function Py2()
let g:syntastic_python_python_exec = '/usr/local/bin/python2.7'
endfunction
function Py3()
let g:syntastic_python_python_exec = '/usr/local/bin/python3.6'
endfunction
call Py3() " default to Py3 because I try to use it when possible
安装了这些功能后,我可以直接在 vim 里用 :call Py2()
或 :call Py3()
来切换 Python 版本,具体取决于我此刻需要哪个版本。这样就不需要退出 vim 去激活其他的虚拟环境,和一些流行的答案所建议的做法不同。
最简单的解决方案:
把这个添加到你的 .vimrc 文件里
let g:syntastic_python_python_exec = 'python3'
let g:syntastic_python_checkers = ['python']
这是一个直接的方法,可以让你切换到 python3。
下面的内容已经不再必要,如果你被迫在严格的 Python 2.x 脚本上工作,可能还会出问题。
最好的办法是保持 Syntastic 的默认设置不变,使用 conda 来管理 Python 3 和 2 的独立环境(每个环境都有自己特定版本的 flake8、pyflakes 等),然后在编辑每个文件时切换到相应的环境。这样,Syntastic 就会根据激活的环境中设置的路径来调用 Python、flake8 或其他工具。
来自 Syntastic 仓库的说明:
问:Python 检查器对语法上有效的 Python 3 代码提出了警告……
答:配置 Python 检查器使用 Python 3 解释器,而不是 Python 2,例如:
let g:syntastic_python_python_exec = '/path/to/python3'
把那行代码加到你的 .vimrc 文件里,这样应该能解决你的问题。