为Vim&切换Python版本Syntastic

时间:2014-04-20 01:51:06

标签: python vim syntastic

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

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

8 个答案:

答案 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-flake8python3-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