Syntasticが構文チェックに使用するpythonバージョンを変更することは可能ですか?
問題 https://github.com/scrooloose/syntastic/issues/385 は、virtual-envを使用できることを示しています。しかし、syntasticまたはvimコマンドだけでも可能ですか?
以下は不要になり、厳密にpython 2.xスクリプトで作業することを強いられた場合、失敗する可能性があります。
最良のオプションは、Syntasticのデフォルトをそのままにし、 conda を使用してpython 3および2(それぞれ独自のバージョン固有のflake8、pyflakesなど)、適切な環境に切り替えて各ファイルを編集します。Syntasticは、アクティブ化された環境で設定されているパスに従って、python/flake8 /その他を呼び出します。
Q. pythonチェッカーは構文的に有効なPython 3構成について文句を言っています...
A. pythonチェッカーをPython 3ではなく、Python 2を呼び出すように設定します。例:
let g:syntastic_python_python_exec = '/path/to/python3'
その行を.vimrcに追加します-これで問題が解決します。
編集:ルビスタリオンは正しいです。これは.vimrcに追加する必要があります
let g:syntastic_python_python_exec = 'python3'
let g:syntastic_python_checkers = ['python']
この質問がGoogleで「Syntastic python」を検索したときに最初に表示される結果であることを考えると、ほとんどの回答は急いでいる人にとって複雑すぎて、新しいものを追加せざるを得ないと感じます1。これはpythonに切り替える簡単なソリューションです。これは最も柔軟な解決策ではないと主張する人もいるかもしれませんが、質問は非常にあいまいであり、単純なことから始めるには必要と思われます。
ここでのすべての回答にもかかわらず、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をアクティブにする必要はありません。
SyntasticにPython 3構文で
pip3 install --user flake8
(作る python3 -m flake8 *.py
work)そしてvimで:
let g:syntastic_python_flake8_exec = 'python3'
let g:syntastic_python_flake8_args = ['-m', 'flake8']
実際にはそうではありませんが、インストール このパッケージ を実行すると、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']
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)の両方がインストールされていることも確認してください。
これを修正するために私がやったのは、そうすることでした:
let g:syntastic_python_flake8_exec = '/path/to/python3'
Flake8がPython3の構文と同期されていることを確認します。私がvirtualenvにいるときでも機能します。
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