Blank File

LinuxとかPythonとかVimとか、趣味でいじる感じで

作ったりフォークしたりしたPython用vimプラグインの紹介

作ったプラグイン

vim-mccabepy

miyakogi/vim-mccabepy

Pythonソースコードの複雑度を測定するプラグインです。一定値以上の複雑度がある場合には警告を出し、場所を示します。

インストール & 使い方

Pythonのmccabeを使っているので、インストールしていない場合はインストールします。jmcantrell/vim-virtualenvなどを使って仮想環境内で実行するには、その仮想環境にmccabeをインストールする必要があります。

pip install mccabe

次に:NeoBundleなどでvim-mccabepyをvimにインストールしてpythonソースコードを開いて:MccabePyで実行します。

設定

警告を出す複雑度はデフォルトだと10になってますが、g:mccabepy_min_complexityを設定することで変更可能です。

例)

let g:mccabepy_min_complexity = 5

また、計測後は自動的にlocation-list windowを開きますが、これも設定で変更可能です。例えばunite.vimインターフェイスを使う場合は、

例)

let g:mccabepy_loc_open_cmd = 'Unite location-list -no-quit -buffer-name=mccabepy'
let g:mccabepy_loc_close_cmd = 'UniteClose mccabepy'

のように設定することでUniteのwindowを開くようになります。二行目は警告がなくなった時の動作を指定しています。上記の例ではUniteのwindowを閉じています。

f:id:h-miyako:20140414173815g:plain

ちなみに、複雑度の測定はnvie/vim-flake8でもできますが、こちらはシンタックスやスタイル(PEP8)のチェックと一緒になってしまいます。私は単体で動作するものが欲しかったので新しく作りました。

virtualenvでpython3を使っている時はエラーが出るかもしれません。その時は私がフォークした方のvim-virtualenvだと上手く動くかもしれません。

フォークしたもの

vim-flake8

オリジナル: nvie/vim-flake8 フォークしたもの: miyakogi/vim-flake8

Pythonシンタックス、スタイル(PEP8)、複雑度のチェックを行えます。私はこのプラグインではスタイルだけをチェックし、シンタックスと複雑度は他のプラグインでチェックしています。

変更点
  • 出力先がquickfix -> location-list
  • vim-mccabepy同様にチェック後のコマンド指定追加

なぜquickfixからlocation-listに変えたのか忘れました・・・使ってみたかっただけ・・・?

私は.vimrcで以下の設定をしてPEP8のスタイル確認だけに使っています。出力先はUniteにしています。

let g:flake8_cmd = "pep8"
let g:flake8_loc_open_cmd = 'Unite location_list -no-quit -direction=botright -winheight=10 -buffer-name=pep8'
let g:flake8_loc_close_cmd = 'UniteClose pep8'
nnoremap <F7> :<C-u>Flake8<CR>

f:id:h-miyako:20140414181438g:plain

pyflakes-vim

オリジナル: kevinw/pyflakes-vim フォーク版: miyakogi/pyflakes-vim

Pythonシンタックスチェッカーです。オリジナルはSyntasticにマージされ、開発は終了しています。しかし、Syntasticでは少々重く感じたのでpyflakesを少し修正して使っています。

変更点
  • キーマッピングの変更
  • エラーの数を出力する関数(PyflakesGetStatusLine)追加

キーマッピングはオリジナル版と同様、お行儀が悪いままです。あとで修正しよう・・・

エラー数を出力する関数は、ステータスラインにエラーの有無を表示するために追加しました。具体的にはitchyny/lightline.vimで表示するためです。

見た目は以下のような感じです。

f:id:h-miyako:20140414184812g:plain

Lightline.vimの設定は、作者の方が説明されているSyntasticの部分をPyflakesに置き換えているだけです。

関係する部分の設定は以下のようにしています。Python以外ではSyntasticでチェックするようにしています。

let g:lightline = {
    \ 'active': {
    \   'right': [
    \     [ 'syntaxcheck' ],
    \     [ 'percent', 'lineinfo' ],
    \     [ 'fileformat', 'fileencoding', 'filetype' ]
    \   ]
    \ 'component_expand': {
    \   'syntaxcheck': 'MySyntaxUpdate',
    \ },
    \ 'component_type': {
    \   'syntaxcheck': 'error',
    \ },

function! MySyntaxUpdate()
  if exists('b:did_pyflakes_plugin')
    return PyflakesGetStatusLine()
  elseif exists('g:loaded_syntastic_plugin') && count(g:syntastic_enable_filetypes, &filetype)
    return SyntasticStatuslineFlag()
  endif
  return ''
endfunction

最後に

フォークして公開だけするのはなにか申し訳ないので、何かしらフィードバックしたいですね。あと、もっとバリバリとプラグインとか作ってみたいと思ってます。というか、いくつかは作って個人的に使っていたりするのですが、公開するとなるとドキュメントが・・・もしかしたらヘルプもREADMEも一切なしでここで紹介だけするかもしれません。

あと、今回スクリーンキャストで表示したソースコードはPyramidのチュートリアルのものを使わせていただきました。このチュートリアルは初心者にもわかり易く、Pyramidを使い始めた時にとても参考になりました。作成者様と翻訳をしてくださった方にこの場を借りてお礼申し上げます。

SQLAlchemy + URLディスパッチ Wiki チュートリアル — The Pyramid Web Application Development Framework v1.4.3 (翻訳)