是否可以更改Syntastic用于语法检查的Python版本?
正如问题https://github.com/scrooloose/syntastic/issues/385所指出的那样,我可以使用虚拟环境。但是,是否也可以仅通过Syntastic或Vim命令实现?
是否可以更改Syntastic用于语法检查的Python版本?
正如问题https://github.com/scrooloose/syntastic/issues/385所指出的那样,我可以使用虚拟环境。但是,是否也可以仅通过Syntastic或Vim命令实现?
将这段代码添加到您的.vimrc文件中。
let g:syntastic_python_python_exec = 'python3'
let g:syntastic_python_checkers = ['python']
这是切换到Python3的简单解决方案。
来自Syntastic repository README:
问:Python检查器抱怨语法上有效的Python 3结构...
答:配置Python检查器调用Python 3解释器而不是Python 2,例如:
let g:syntastic_python_python_exec = '/path/to/python3'
将该行添加到您的.vimrc文件中-这应该可以解决您的问题。
:!python3 -m flake8 %
可以正常工作。 - Marius Gedminasg:syntastic_python_python_exec
是指python
检查器,与flake8
检查器无关。如果你想在Python 3下运行flake8
,可以安装针对Python 3编译的flake8
,或编写一个包装脚本,或将g:syntastic_python_flake8_exe
(而不是*_exec
,请参阅手册了解区别)设置为'python3 -m flake8'
。 - lcd047python
或者当前虚拟环境中定义的 python
- 我通常会为我的 Python3 工作创建一个虚拟环境:let g:syntastic_python_checkers=['pylint']
let g:syntastic_python_python_exec = 'python'
let g:syntastic_python_pylint_exe = 'python -m pylint'
显然,我使用的是 pyflakes
而不是 flake8
... - egelandvirtualenv
或pyenv
,在其中安装相关的检查器,然后从虚拟环境中运行Vim(参见FAQ)。这样做的好处是它适用于所有Python检查器,而不仅仅是python
。 - lcd047.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并激活不同的虚拟环境,就像流行的答案所要求的那样。
我成功地说服了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']
python
检查器,且 (2) 这会使 Syntastic 认为 flake8 已安装,即使它并没有被安装。如果你坚持这种方法,请将 g:syntastic_python_flake8_exe
(而不是 exec
)设置为 'python3 -m flake8'
。 - lcd047let g:syntastic_python_flake8_exec = 'python3'
。对吗? - Tarraschcommand! -bar Python2 let g:syntastic_python_flake8_exe = 'python2 -m flake8' | SyntasticCheck
和
command! -bar Python3 let g:syntastic_python_flake8_exe = 'python3 -m flake8' | SyntasticCheck
- Marius Gedminas如果您正在使用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 上)。python3
不兼容的警告。python
,而你想要获得python3
不兼容的警告。在命令模式下,你可以通过添加py3kwarn
到g:syntastic_python_checkers
来实现。:let g:syntastic_python_checkers=['python', 'py3kwarn']
并且仅转换到python2.x
:let g:syntastic_python_checkers=['python']
let g:syntastic_python_checkers=['python27']
起了作用。 - John C Earls let g:syntastic_python_flake8_exec = '/path/to/python3'
仅就Zaar Hai的脚本进行迭代,下面的代码应该可以工作,并且更加健壮。
#!/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