web-dev-qa-db-ja.com

スイッチPython Vim&Syntasticのバージョン

Syntasticが構文チェックに使用するpythonバージョンを変更することは可能ですか?

問題 https://github.com/scrooloose/syntastic/issues/385 は、virtual-envを使用できることを示しています。しかし、syntasticまたはvimコマンドだけでも可能ですか?

42
mjb4

以下は不要になり、厳密にpython 2.xスクリプトで作業することを強いられた場合、失敗する可能性があります。

最良のオプションは、Syntasticのデフォルトをそのままにし、 conda を使用してpython 3および2(それぞれ独自のバージョン固有のflake8、pyflakesなど)、適切な環境に切り替えて各ファイルを編集します。Syntasticは、アクティブ化された環境で設定されているパスに従って、python/flake8 /その他を呼び出します。


SyntasticリポジトリのREADME から:

Q. pythonチェッカーは構文的に有効なPython 3構成について文句を言っています...

A. pythonチェッカーをPython 3ではなく、Python 2を呼び出すように設定します。例:

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

その行を.vimrcに追加します-これで問題が解決します。

22
naught101

最も簡単な解決策:

編集:ルビスタリオンは正しいです。これは.vimrcに追加する必要があります

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

この質問がGoogleで「Syntastic python」を検索したときに最初に表示される結果であることを考えると、ほとんどの回答は急いでいる人にとって複雑すぎて、新しいものを追加せざるを得ないと感じます1。これはpythonに切り替える簡単なソリューションです。これは最も柔軟な解決策ではないと主張する人もいるかもしれませんが、質問は非常にあいまいであり、単純なことから始めるには必要と思われます。

30
Raphael D.

ここでのすべての回答にもかかわらず、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をアクティブにする必要はありません。

15
Bruno Bronosky

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']
8
Marius Gedminas

実際にはそうではありませんが、インストール このパッケージ を実行すると、python3非互換の警告が表示されます。

現在のSyntastic Pythonチェッカーがpythonであり、python3互換性のない警告を取得したいとします。コマンドモードでは、py3kwarng:syntastic_python_checkersに追加できます

:let g:syntastic_python_checkers=['python', 'py3kwarn']

python2.xのみに切り替えます

:let g:syntastic_python_checkers=['python']
3
attomos

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)の両方がインストールされていることも確認してください。

3
Zaar Hai

これを修正するために私がやったのは、そうすることでした:

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

Flake8がPython3の構文と同期されていることを確認します。私がvirtualenvにいるときでも機能します。

1

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
0
jhrr