是否可以更改syntastic用于语法检查的python版本?
正如问题https://github.com/scrooloose/syntastic/issues/385表明我可以使用虚拟环境。但它是否也可以使用syntastic或vim命令?
答案 0 :(得分:20)
以下不再需要,如果您被迫使用严格的python 2.x脚本,可能会搞砸。
最好的选择是单独保留Syntastic默认值,并使用conda管理python 3和2的单独环境(每个环境都有自己特定于版本的flake8,pyflakes等安装),并且切换到适当的环境来编辑每个文件。然后,Syntastic将根据激活环境中设置的路径调用python / flake8 /其他任何内容。
来自Syntastic repository README:
<德尔>问python检查器抱怨语法上有效的Python 3构造...
<德尔>一个。配置python检查器来调用Python 3解释器而不是Python 2,例如:
<德尔>
let g:syntastic_python_python_exec = '/path/to/python3'
德尔>
将该行添加到.vimrc中 - 这应该可以解决您的问题。
答案 1 :(得分:12)
尽管这里有所有答案,我仍然发现常见问题解答中的建议是最好的。我已将此添加到我的.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并激活不同的virtualenv,因为流行的答案会让你这样做。
答案 2 :(得分:8)
我设法说服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']
答案 3 :(得分:8)
考虑到该问题是在Google中搜索“ Syntastic python3 ”时出现的第一个结果,我的印象是,大多数答案对于赶时间的人来说太复杂了,我不得不这样做添加一个新的。切换到 python3 的直接解决方案是放置
r-value
在您的let g:syntastic_python_checkers = ['python3']
中。有人可能会说这不是最好的解决方案,但问题如此模糊,以至于从简单的事情开始似乎是必要的。
答案 4 :(得分:3)
不是,但您可以通过安装获得python3
不兼容的警告
this package
让我们说你当前的Syntastic Python检查程序是python
,你想得到
python3
不兼容的警告。在命令模式下,您可以通过
py3kwarn
添加到g:syntastic_python_checkers
:let g:syntastic_python_checkers=['python', 'py3kwarn']
并切换到python2.x
:let g:syntastic_python_checkers=['python']
答案 5 :(得分:2)
如果您在virtualenv下工作,则可以使用检测当前python版本的脚本并相应地调用flake8
。将以下内容放在路径中,名称为flake8.sh
:
#!/bin/sh
PYMAJOR=$(python --version | awk '{print $2}'| awk -F. '{print $1}')
exec /usr/bin/python$PYMAJOR /usr/bin/flake8 $*
现在你vimrc
添加:
let g:syntastic_python_flake8_exe='flake8.sh'
还要确保安装了python-flake8
和python3-flake8
(在Ubuntu上)。
答案 6 :(得分:1)
只有我这样做才能解决这个问题:
{{1}}
确保flake8与Python3的语法同步。 即使我在virtualenv工作。
答案 7 :(得分:0)
稍微迭代Zaar Hai's脚本,这样的事情应该有效并且更加健壮。
#!/usr/bin/env bash
_python=$(command -v python)
[[ "$(uname -s)" =~ Darwin ]] && IS_OSX=true
if [[ "$IS_OSX" ]]; then
if command -v 'greadlink' >/dev/null 2>&1; then
greadlink -f "$_python"
else
echo 'Install coreutils!' >&2
fi
else
readlink -f "$_python"
fi