51

是否可以更改 syntastic 用于语法检查的 python 版本?

正如问题 https://github.com/scrooloose/syntastic/issues/385表明我可以使用虚拟环境。但是仅使用 syntastic 或 vim 命令也可以吗?

4

8 回答 8

46

最简单的解决方案:

添加这个给你.vimrc

 let g:syntastic_python_python_exec = 'python3'
 let g:syntastic_python_checkers = ['python']

这是切换到python3的直接解决方案。

于 2018-07-25T15:21:14.220 回答
20

以下不再是必需的,如果您被迫使用严格的 python 2.x 脚本,可能会搞砸。

最好的选择是单独保留 Syntastic 默认值,并使用conda来管理 python 3 和 2 的单独环境(每个环境都有自己的 flake8、pyflakes 等特定于版本的安装),并切换到适当的环境进行编辑每个文件。然后 Syntastic 将根据激活环境中设置的路径调用 python/flake8/whatever。


Syntastic 存储库 README中:

问:python 检查器抱怨语法上有效的 Python 3 构造...

A. 将 python 检查器配置为调用 Python 3 解释器而不是 Python 2,例如:

let g:syntastic_python_python_exec = '/path/to/python3'

将该行添加到您的 .vimrc - 这应该可以解决您的问题。

于 2014-09-03T06:08:30.430 回答
18

尽管这里有所有答案,但我仍然认为常见问题解答中的建议是最好的。我已将此添加到我的.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 中根据我目前的需要切换 python:call Py2()版本:call Py3()。无需像流行的答案那样退出 vim 并激活不同的 virtualenv。

于 2017-03-30T18:09:07.890 回答
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']
于 2015-03-22T14:23:17.470 回答
3

不是真的,但你可以python3通过 install 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']
于 2014-04-22T05:33:22.507 回答
3

如果您在 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-flake8python3-flake8(在 Ubuntu 上)。

于 2016-04-26T13:09:47.527 回答
1

只有我这样做才能解决这个问题:

  let g:syntastic_python_flake8_exec = '/path/to/python3'

确保 flake8 与 Python3 的语法同步。即使我在 virtualenv 中工作。

于 2016-11-26T06:41:56.207 回答
0

只是对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
于 2016-09-01T19:47:48.667 回答