为Vim和Syntastic切换Python版本

mjb*_*jb4 39 python vim syntastic

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

问题 https://github.com/scrooloose/syntastic/issues/385表明我可以使用virtual-env.但它是否也可以使用syntastic或vim命令?

Rap*_* D. 25

考虑到这个问题是在Google搜索" Syntastic python3 " 时出现的第一个结果,我的印象是大多数答案对于匆忙的人来说太复杂了,我觉得有必要添加一个新问题.切换到python3的直接解决方案是放

 let g:syntastic_python_python_exec = 'python3'
 let g:syntastic_python_checkers = ['python']
Run Code Online (Sandbox Code Playgroud)

在你的__CODE__.有人可能会说这不是最好的解决方案,但问题是如此模糊,似乎有必要从简单的事情开始.

  • 对于我们*仅*在Python3中工作的人(尤其是在使用Docker包含环境时),这比设置只运行Vim的虚拟环境要方便得多。 (2认同)
  • 如果不起作用,如何获得24票赞成票?没有名为“ python3”的python检查器。添加此行将关闭所有python语法检查。 (2认同)

nau*_*101 21

下面不再需要了,如果你被迫使用严格的python 2.x脚本,可能会搞砸.

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


Syntastic存储库README:

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

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

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

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

  • @Marius Gedminas那很好,因为`g:syntastic_python_python_exec`指的是`python`检查器,它与`flake8`检查器无关.如果你想在Python 3下运行`flake8`或者安装一个针对Python 3编译的flake8,或者编写一个包装脚本,或者将`g:syntastic_python_flake8_exe`(不是`*_exec`,请参见手册中的差异)设置为`' python3 -m flake8'`. (5认同)
  • 使用合成器de5e025ef0b8a9eec588d618ebaebd104945af4c对我不起作用.我从有效的Python 3构造中得到语法错误.`:!python3 -m flake8%`工作正常. (3认同)
  • 我现在正在使用这些设置,它使用系统`python`或由我所在的virtualenv定义的`python` - 我使用virtualenv进行我的python3工作:`let g:syntastic_python_checkers = ['pylint'] ``让g:syntastic_python_python_exec ='python'``让g:syntastic_python_pylint_exe ='python -m pylint'.显然,我使用`pyflakes`而不是`flake8` ... (3认同)
  • 请注意,现在这已不再是推荐的方法了.只需安装`virtualenv`或`pyenv`,在里面安装相关的检查程序,然后从虚拟环境运行Vim(参见[FAQ](https://github.com/vim-syntastic/syntastic#faqpython)).这样做的好处是它适用于_all_ Python检查程序,而不仅仅适用于`python`. (2认同)

Bru*_*sky 14

尽管这里有所有答案,我仍然发现常见问题解答中的建议是最好的.我已经添加了这个,.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
Run Code Online (Sandbox Code Playgroud)

安装这些功能后,很容易在vim中使用:call Py2():call Py3()取决于我现在需要的内容切换python版本.无需退出vim并激活不同的virtualenv,因为流行的答案会让你这样做.


Mar*_*nas 8

我设法说服Syntastic处理Python 3语法

pip3 install --user flake8
Run Code Online (Sandbox Code Playgroud)

(python3 -m flake8 *.py做工)然后,在vim中:

let g:syntastic_python_flake8_exec = 'python3'
let g:syntastic_python_flake8_args = ['-m', 'flake8']
Run Code Online (Sandbox Code Playgroud)

  • ...除了(1)这不影响`python`检查器,并且(2)它使合成器相信flake8即使不安装也是如此.如果你坚持这样做的话,将`g:syntastic_python_flake8_exe`(不是`exec`)设置为''python3 -m flake8'. (3认同)