Vimで文法チェック (python編)

以前に、↓のようなふざけたエントリを書いたのですが、最近はもっぱらPythonなので、PythonでSyntaxエラーやら、書き方のチェックがしたいなと思って調べた内容をポストします。

vimで手軽に文法チェック(syntax check) - Study03.net 対シンバシ専用

1. チェックするためのツールをインストール

python には、phpperlのように、実行時のオプションで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」は○

余談

ちなみに「:make」で文法チェックさせるのは vimの作法的にあまりよろしくない的な事を前に指摘されたのでその辺もその内なおしたい。

いじょ。