普通にコマンドとしても使えるわけですが、今書いているものに対して使用したいわけです。
で、私のメインエディタはvimなので、vimで使うにはどうすればいいか。
ただ使うだけならpythontidyにパスを通して
:%! pythontidy
でよい。普通はこれを適当なキーにマッピングしてやることになるはず。ただpythontidyはsyntax errorのあるコードを受け付けないらしく、この方法ではsyntax errorが含まれているときに実行すると、エラーメッセージというかtracebackがバッファに書き込まれてしまう。uすれば戻るけど、うっかり:wqとかすると大変な事になる。
正常に動作した場合でもカーソルが一番上の行に移動してしまう。これはマークを設定してやれば回避できるけど面倒すぎる。
というわけで、pythontidyを使うためだけのvimスクリプトを書いてみた。
前提としてPYTHONPATHにpythontidyが入るようにしておくこと。
function! Pythontidy()
python << EOF
import tempfile
import vim
import pythontidy
cb = vim.current.buffer[:]
b = tempfile.TemporaryFile(mode="rb+")
out = tempfile.TemporaryFile(mode="rb+")
for l in cb[:]:
b.write(l + '\n')
b.seek(0)
pythontidy.tidy_up(b, out)
out.seek(0)
vim.current.buffer[:] = out.readlines()
EOF
endfunction
これをpython_tidy.vimという名前でもつけてあげて、ftpluginの下に置いてやる。
で、python.vimに
map <f5> :call Pythontidy()
と書く。<f5>のところは任意のキーでいい。これでsyntax errorを含むコードを食べさせても、インフォメーションメッセージにエラーが出てくる。ちゃんと動作したときも行の位置が変化しない。
これで安心してダラダラコーディングできる。
0 件のコメント:
コメントを投稿