VimでPython環境をいい感じに整える

  • 195
    いいね
  • 3
    コメント
この記事は最終更新日から1年以上が経過しています。

注: この記事は「Feb 12th, 2013 12:44am」に別ブログで書いたものです。

まえがき

思うところあって、Pythonを始めてみることにしました。

そのために環境を整えていたのですが、いじりだすと色々と気になって、結局まだPythonそのものは全然書けていないですw

ただ、その代わりそこそこいい感じになったので、何をしたのかまとめてみました。

あ、OSは「OS X 10.8 Mountain Lion」です。OSに依存するような話はないと思いますが、念の為。

Pythonそのものの環境設定

まずはPythonそのものの環境構築です。本題ではないですが、別記事にするほどでもないので、備忘録を兼ねてここに。

PythonそのものはMacにデフォルトで入っているものを使います。2.7.2が入っていました。

そしてvirtualenv環境を構築するのがいいらしいので、早速構築します。virtualenvとは、Pythonのいろいろな実行環境を仮想的に構築出来るもの、だそうです。

まずはeasy_installというPythonのパッケージ管理ツールを入れます。

$ curl -O http://python-distribute.org/distribute_setup.py
$ sudo python distribute_setup.py

そしてeasy_installを使って、easy_installより便利なパッケージ管理ツールであるpipを導入。

$ sudo easy_install pip

pipを使って、virtualenvを導入。

$ sudo pip install virtualenv
$ sudo pip install virtualenvwrapper

virtualenvで使うパスの指定と、virtualenvwrapperのスクリプトにパスを通すため、.zshenvや.bash_profileに、↓を追加。

# python
export WORKON_HOME=~/.virtualenvs
. /usr/local/bin/virtualenvwrapper.sh

これだけでvirtualenvを使う準備が整いました。

環境を作るにはmkvirtualenvコマンド

$ mkvirtualenv study

環境を切り替えるにはworkonコマンド

$ workon study

デフォルト環境に戻すならdeactivateコマンドです。

補完プラグイン

ここからはVimの話。

1.png

こんなん出来ます。速いし構文解析してて精度がかなりすごいし、とっても便利。pydocを開く機能とか、正確に変数名の変更が出来たりとか、とにかくオススメ。これが使いたくてPythonを選んだというのも、正直あります。

インストールは他のプラグイン同様にNeoBundleなどを使えばいいのですが、更にjediそのものを入れる必要があります。

ただjedi.vimの中でgitのsubmoduleとして管理さているため、.vim/bundle/jedi-vimの中で、

$ git submodule update --init

とするだけで、jedi-vimを使えるようになります。

色々と便利なプラグインなんですが、デフォルトだと余計な設定もされるので注意が必要です。色々マッピング設定している人は、一度確認した方がいいです。

自分の場合、quickrunが使えなくなったり、Kのマッピングが潰されて困ったり、あるいはvim-refと同等の機能があるのでマッピングを上書きしたかったり……。

結果こうしました。

" rename用のマッピングを無効にしたため、代わりにコマンドを定義
command! -nargs=0 JediRename :call jedi#rename()

" pythonのrename用のマッピングがquickrunとかぶるため回避させる
let g:jedi#rename_command = ""
let g:jedi#pydoc = "k"

rename_commandをまず使わないようなマッピングに退避。その代わりrename機能を:JediRenameで呼び出せるようにして、pydocの呼び出しコマンドをあえて普段vim-refの呼び出しに使っているkに変更しました。

詳しくはこちらも参照。

構文エラーの検出

多言語に対応した構文エラー検出プラグインSyntasticが、Pythonに対応しています。なので、それをそのまま使ってもいいのですが、自分は「pyflakes-vim」というプラグインを使うことにしました。

2.png

このように、構文エラーがあるところに赤線が出ます。保存したタイミングではなく、コードを書いているときに自然と出てくる感じがいいです。

jedi-vimと同じくインストールのために「git submodule update --init」をします。

また、Syntasticを無効にするため、以下のように変更しました。

他の言語の設定もあるため分かりにくいですが、passive_filetypesとしてpythonを指定しています。

let g:syntastic_mode_map = {
            \ 'mode': 'active',
            \ 'active_filetypes': ['php', 'coffeescript', 'sh', 'vim'],
            \ 'passive_filetypes': ['html', 'haskell', 'python']
            \}

文法チェック

pep8(Pythonのコーディング規約)やpyflakes(未定義変数の使用などの検出)の機能を包括したプラグイン。pyflakes-vimの機能と若干かぶってますね。
これを入れることで、簡単にコーディング規約に違反してないかのチェックが出来ます。

flake8を別途入れる必要があるので、冒頭で紹介したpipを使っていれました。

sudo pip install flake8

自分の場合、次のようにして「<leader>l」で呼び出せるようにしました。

nnoremap  <leader>l :call Flake8()

一通り動くコードが出来上がったあとに、pep8に違反してないかチェックするのにいいかなと。

もちろん保存時に自動で動くようにしたりも出来ますが、ちょっとした実験コードを書くときとか、必ずしも綺麗にコードを書きたい訳じゃないときもあると思ったので、必要な時に呼び出すようにしようと思います。

無駄な空行があるとか、コンマの後にスペースがないとかも警告されてビビります。Pythonっぽい感じがしていいですね!

インデント表示

Python向けのプラグインではないですが、インデント可視化プラグインがまたいい感じです。

他の言語を書くときもあると便利なのですが、インデントが重要な意味を持つ言語ではなおのこと便利ですね。

この手のプラグインで定番なのは「Indent Guides」です。

3.png

ただ、今さっき知ったのですが「indentLine」というプラグインもあるみたいです。

試していないので分からないですが、GitHubに載っているスクリーンショットは「indentLine」も負けないくらい格好いいので、あとで試してみようと思います。

まとめ

ということで、なかなか良さ気な環境が出来ました。

最後に今回いじった範囲のvimrcをまとめて載せておきます。