Версия Python для Vim & Syntastic
Можно ли изменить версию python, используемую синтаксисом для проверки синтаксиса?
Как проблема https://github.com/scrooloose/syntastic/issues/385 указывает, что я могу использовать virtual-env. Но возможно ли это также с помощью синтаксических или vim-команд?
Ответы
Ответ 1
Ниже больше не нужно и может испортиться, если вы вынуждены работать на строго python 2.x script.
Самый лучший вариант - оставить только значения Syntastic по умолчанию и использовать conda для управления отдельными средами для python 3 и 2 ( каждый из которых имеет свои собственные установки для версии flake8, pyflakes и т.д.), а также для переключения в соответствующую среду для редактирования каждого файла. Затем Syntastic вызовет python/flake8/все остальное в соответствии с путями, установленными в активированной среде.
Из README для репозитория Syntastic:
Q. Контроллер python жалуется на синтаксически корректные конструкции Python 3...
A. Настройте python checker для вызова интерпретатора Python 3, а не Python 2, например:
let g:syntastic_python_python_exec = '/path/to/python3'
дел >
Добавьте эту строку в ваш .vimrc - это должно устранить вашу проблему.
Ответ 2
Мне удалось убедить 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
Несмотря на все ответы здесь, я по-прежнему считаю, что рекомендации из FAQ являются лучшими. Я добавил это к моему .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
С установленными функциями легко переключить версию python прямо в vim с помощью :call Py2()
или :call Py3()
в зависимости от того, что мне нужно в данный момент. Вам не нужно выходить из vim и активировать другой virtualenv, так как ваш популярный ответ вы бы сделали.
Ответ 4
Не совсем, но вы можете получить несовместимое предупреждение python3
, установив
этот пакет.
Скажем, ваша текущая проверка 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
Если вы работаете в virtualenv, вы можете использовать script, который обнаруживает текущую версию 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
Только я сделал это, чтобы это сделать:
let g:syntastic_python_flake8_exec = '/path/to/python3'
Чтобы убедиться, что flake8 синхронизирован с синтаксисом Python3.
Даже когда я работаю в virtualenv.
Ответ 7
Просто для повторения