Vimで文法チェック (python編)
以前に、↓のようなふざけたエントリを書いたのですが、最近はもっぱらPythonなので、PythonでSyntaxエラーやら、書き方のチェックがしたいなと思って調べた内容をポストします。
vimで手軽に文法チェック(syntax check) - Study03.net 対シンバシ専用
1. チェックするためのツールをインストール
python には、phpやperlのように、実行時のオプションでsyntaxチェックを行ってくれるようなものはないっぽいです。
php -l hoge.php perl -wc hoge.pl に相当するものはpythonコマンド単体ではない。
なので、これと似たような事をしてくれるツールをpipでインストールします
インストールするのは先日のエントリでも書いた以下の二つ
Mac で Python - Study03.net 対シンバシ専用
pip install pyflakes pip install pep8
pyflakes は簡単に文法チェックや使ってないモジュールを指摘してくれるツールです。
pyflakes hoge.py
下記記事を参考にさせていただきました。
vimでPythonのコードを書いているときにflymake?っぽい感じをだす | hexacosa.net
もう一つはpep8です。 Python界にはPEP8として提案された、公式のコーディングスタイルみたいなのがありまして、そのコーディングスタイルに従っているかどうかをチェックしてくれます。
下記記事を参考しました。
Pythonのコーディングスタイル(PEP8)をコマンドでチェック | TRIVIAL TECHNOLOGIES 4 @ats のイクメン日記
2. vim から 使えるようにする。
この二つのツールをvimから使えるようにします。やり方は前と一緒で、「:make」で動くようします
まず、「.vimrc」を編集して「file type plugin」が使えるようにしましょう。
以下の行を.vimrcに追記してください。
"filetype plugin filetype on filetype plugin on
こいつを書いたら、「.vim」ディレクトリ以下に、「ftplugin」というディレクトリを掘って、「python.vim」というファイルを作ってください。
mkdir ~/.vim/ftplugin touch ~/.vim/ftplugin/python.vim
今度は、pyflakesと、pep8を同時に動かす、シェルスクリプトを作ります。
touch ~/.vim/ftplugin/python_check.sh
python_check.shの中身をこんな風にしてください。
#!/bin/sh #required pyflakes ex) pip install pyflakes pyflakes $1 #required pep8 ex) pip install pep8 pep8 $1
こんどは、上で作った、python.vimに下記内容を追記してください。
"syntax check set makeprg=~/.vim/ftplugin/python_check.sh\ % set errorformat=%m\ in\ %f\ on\ line\ %l
これで準備は完了です。後は、適当にpythonスクリプトのファイルを開いて
:make
とうってみてください。下記のようなエラーが表示されると思います。
:!/Users/tell_k/.vim/ftplugin/python_check.sh flaskr.py 2>&1| tee /var/folders/ 8G/8G-pZZDfFJu82xR1B078vk+++TI/-Tmp-/v744976/2 flaskr.py:39: invalid syntax @ 1app.route('/login', methods=['GET', 'POST']) ^ flaskr.py:20:1: E302 expected 2 blank lines, found 1
これにて完了。以下はよく遭遇するメッセージ例です。
3. よく遭遇するヤツ。
E302 expected 2 blank lines
これは関数と関数の間や、クラスとクラスの間が2行あいてないとだめという意味
W291 trailing whitespace
行の末尾に空白があるとだめというメッセージ
E303 too many blank lines (2)
関数と関数の間に空白行がありすぎるから駄目、空白行は1行までというメッセージ
E501 line too long (96 characters)
一行は79文字までだっていってんだろなげーよというメッセージ
W391 blank line at end of file
ファイルの最後に空行いれんなよゴルァというメッセージ
E225 missing whitespace around operator
演算子(=) とかは必ず 空白を入れて使えや というメッセージ ex) 「a=b」 は× 「a = b」は○