経緯
- 転職してPythonメインの会社で働いてます
- エディタハラスメントはなくなってVim使ってもいい会社です
- VimでPythonをゴリゴリかける環境を作ろう
必須
会社に入ってからvimの設定をすべてneovim用に書き直しました。
今環境構築するならサクサク動くneovimでやってやりましょう。
- neovim 0.1.7
- macOS sierra 10.12.3
neovimのインストールについては過去記事を参照。
Ubuntu向けで書いたけどmacでもほぼ同様。 apt-get
を brew
に読み替えれば行けるはず
Ubuntuでzsh+neovimの環境設定
導入プラグイン
Pythonをvimで書きたいなら幾つかのプラギンは必須。
今回ご紹介するプラギンは次のとおりです。
- dein.vim
- denite.nvim
- deoplete.nvim
- vim-airline
- nerdtree
- vim-fugitive
- deoplete-jedi
- vim-quickrun
- neomake
- vim-virtualenv
dein.vim
- プラグインマネージャ
- 暗黒美夢王の謹製プラギン。暗黒の力をあなたのVimに
沢山のプラグインを管理する上でプラグインのインストール、アップデートを補助するプラグインマネージャは必須。
以前は dein.vim
の前身たる neobundle
を使用していましたが、転職を機に乗り換えました。 *.toml
で設定ファイルを作成できるようになったため、プラグインの依存関係や遅延ロード設定は neobundle
時代に比べ、格段に可読性がよくなりました。
暗黒美夢王は私が最もお世話になっているVimmerです。そう思っているのは私だけじゃないだろうけど。
denite.nvim
- ファイルランチャーしかし、それだけにとどまらない脅威の汎用性
- 暗黒美夢王の謹製プラギン。暗黒の力をあなたのVimに
- neovim専用プラギン
- Python3必須
主にファイルランチャーとして使用します。しかしそれだけではない。 denite
はありとあらゆるものをリスト表示、絞り込み、操作する統合プラットフォームです。
私の場合は、プロジェクト内のファイル一覧を表示→絞り込み→開くがメインで、ファイル内の文字列をGrep検索。関数リストの表示などがサブ用途となります。
ファイルのみならずありとあらゆるものを扱えるだけあって、その汎用性は高く。ソート順、検索エンジンやGrepコマンドの切り替え、選択した対象の操作などカスタマイズが豊富です。
本体動作が高速なのはもちろん、denite起動→絞り込み→開く
の流れは自分の思考をそのまま反映するが如く、ファイル・行ジャンプを可能にします。使いこなせばエディットのスピードが加速することは間違いありません。
反面 denite
は設定が複雑になりがちです。helpを読みながら自分の身体に合わせたカスタマイズが必要となります。インスコ後すぐに爆速〜とはなりません。
deoplete.nvim
- 自動補完システム
- 暗黒美夢王の謹製プラギン。暗黒の力をあなたのVimに
- neovim専用プラギン
- Python3必須
自動補完プラグインです。そしてまた暗黒美夢王の暗黒の力です。
頭に自動補完システムと記載したのは、それはこのプラグインが他の自動補完プラグインとは一線を画すためです。
例えば、Pythonの自動補完プラグインならば jedi-vim
というプラグインがあるのですが、コレはPythonの自動補完のみを実施するプラグインです。
対して deoplete
は補完機能のベースのみを提供し、言語毎の独自の補完は、 deoplete
のインタフェースに従った外部プラグイン source
(と呼ばれるそうです)を使用して補完を追加する形式になります。
なおPythonの自動補完は、後述する deoplete-jedi
で追加されます。
こうして書いてみると、暗黒美夢王が作ってるものって、プラグインじゃなくてエコシステムなんじゃないのかなと思う。
vim-airline
- ステータスバー改造プラギン
- 導入するとあら不思議。vimのスタータスバーがとってもおしゃれになっちゃうぞ♪
ステータスバーを色々弄っておしゃれにしてくれます。
エディットにとても影響をあたえるかと聞かれたらそこまででもないです。しかし、エディットのテンションを上げるためには、「私はカッコイイエディタでエディットしてるんだ。」というカッコつけな何かが必要となります。
Normal,Insert,Visualの各モードで色変更、編集中のGitブランチの表示、env中のvirtualenvの表示、その他カーソル位置情報の表示などをしてくれます。おしゃれに。
nerdtree
- ファイルエクスプローラー
- 弱いvim使いの助っ人
IDEの左によくついてるエクスプローラーです。denite
があればファイルエクスプローラなんていらないじゃんって思ってたんですが。人間多くの事を覚えてはいられないもので、階層構造でファイルを見たい時って結構あるんですよね。
すぐにdenite
に打ち込むファイル名が浮かんでこないとき、nerdtree
を開くとそこには安心のファイル一覧が。
なお、nerdtree-git-pluginと後述するfugitive
を使用すれば。nerdtree
上にファイル編集状態が表示されます。
「そんなのAtomやVsCodeなら最初からついとるわボケぇ」とか言わないで。心が折れる。
vim-fugitive
- Gitクライアントプラグイン
- vimから離れないでGitが使えます
基本的に私はずっとvimに居ないと心が落ち着かないとかいう人間ではなく、普通にCtrl+zでターミナルとvimを行き来したりするんで、そこまで必要か?と思っていました。
けどターミナルで操作するより圧倒的に有利な部分があって、それがfugitive
の:Gdiff
と:Gblame
コマンド。
:Gdiff
は、「しまったコレは編集前のほうが良かったぞ」と思う場合に使用する。
そういう場合にgitのdiffを表示してそこから元コードを引っ張ってくるという操作をしているのだが、ターミナルに戻る→diff表示→コピー→vimに戻ってペースト
が":Gdiff"の実行→ヤンク→ペースト
となる。かなりの速度向上。
:Gblame
に関してもコードを見ている最中に、コレどうしてこうなってたっけとなったものがその場で:Glame
一発で見れてログ情報も参照できる。
しかも:Gdiff
も同様だが、vimのsyntax highlightが適用された状態で。速い。
deoplete-jedi
- deopleteのPython用sourceを追加するプラグイン
- 作者はPython覚えて数ヶ月でコレを作ったらしい。すごい
前述したdeoplete
に対してPythonの自動補完を追加します。
裏側ではPythonの静的解析ライブラリjedi
(スター・ウォーズとは関係ない?)を使用して解析結果をdeoplete
に渡しているようです
vim-quickrun
- プログラムランナー
vim上でPythonのプログラムを実行することができます。
私の使い方は実行結果にエラーがなければBufferに出力、エラーがあればQuickFixに表示してそのままコードジャンプしています。
なお単体では非同期実行をサポートできないため、別途vimproc.vimを追加して、vim-quickrun
にで設定する必要があります。
なお類似プラギンにasyncrunという非同期実行を、vimprocではなくvim本体の機能で行うプラギンがあるのですが、どうもパス周りをうまく読み込んでくれなかったため、インストールだけして使っていません。
neomake
- linter実行プラグイン
Pythonにはpep8
と呼ばれる構文ルールがあり、それを自動検出するためのlinterとよばれる静的解析コマンドがあります。neomake
ではそのlinterを非同期実行し、実行結果をvim上にマーカー表示してくれます。
私の場合はpep8
に加えpylint
も検出してくれるflake8
を実行させています。
なお、もともとは類似プラギンであるsyntasticを使用していましたが、こちらは非同期実行をサポートしていないため、neomake
に乗り換えました。
vim-virtualenv
- virtual-envのパス自動追加プラギン
Pythonで開発しているならば、virtualenvを使用するシーンが多々あるはずです。その場合、virtualenvでしかインストールしていないライブラリなどをvim上で参照する必要があるでしょう。
このプラギンはそんな状況のためにあります。
virtualenvをactivateしてvimを起動すれば、virtualenvのライブラリを読み込んだ状態でvimが起動します。
私のVimrc
ホントは各プラギン毎に、抜粋したvimrcを記載したいのですが、力尽きたのでまた時間があるときに更新します。
lighttiger2505/.dotfiles
最後に
vimで仕事をして1ヶ月ちょいを経てこれまで趣味レベルと比べて、かなり実用的な環境が整ってきたので、この機会にご紹介しようかと。
こうして外に晒してみたら、俺のほうがもっといいvimだっという人もいるかと思いますので、教えてくれたらうれしいです。