vimプラグインでよりよいコーディングを

こりなくvimプラグインの紹介をします。北原(@soh335)です。

たかが、エディタですがプログラムを書く際には一番触っている道具です。イチローも道具は大切にすることが重要と言ってますし、メンテナンスしながら良い状態にしておきたいですね。

今回はvimプラグインの管理、プログラム書く自体には関係ないけど便利なプラグイン、実際にエディタを使っている際に便利なプラグインの紹介をします。

vimプラグインの管理

vim-pathogen

http://www.vim.org/scripts/script.php?script_id=2332

vimプラグインは、windows環境はで$HOME/vimfiles/、mac等では$HOME/.vimのディレクトリの下にインストールしていきますが様々なプラグインを一つのディレクトリにいれると

vim-pathogen-1.png

vim-pathogen-2.png

のようになり例えばこのプラグインが更新されたのでアップデートしようとしたときにautoload下のこれと、plugin下のあれこれを置き換えて...、となり億劫になってしまいます。

vim-pathogen ではvimのプラグインの管理をしやすくするためのプラグインです。このプラグインを利用すると以下のようなディレクトリ構成になります。

vim-pathogen-3.png

vim-pathogen を利用した場合、新しいプラグインはデフォルトでは$HOME/.vim/bundleの下にプラグインのディレクトリごとに配置していきます。つまり、例えば github で開発されている vimプラグインを使いたい場合bundleの下にチェックアウトすることで、必要な時に git pull をするだけでプラグインの更新をすることが出来ます。また、 $HOME/.vim 自体をgitで管理している場合は新しいプラグインのディレクトリを git submodule で管理するということも可能です。

インストール方法は、 $HOME/.vim/autoload/pathogen.vim の位置に配置します。その後、 .vimrc に

call pathogen#runtime_append_all_bundles()

を書くことでbundle以下をプラグインとして読み込むようになります。また、helptagを生成する場合は以下のコマンドを実行します。

call pathogen#helptags()

これから紹介するプラグインは、まだ盛んにアップデートされているものも多いので vim-pathogen で管理するというのはとても有効だと思います。

コードを書くその前に

vim-ref

http://github.com/thinca/vim-ref

vim-ref はperldocやphpmanual等のリファレンスをvim上で見るためのプラグインです。リファレンスを見るためのプラグインとしては perldoc.vim や phpmanual.vim 等がありますが、これらは別々のプラグインのため微妙に操作感が違うという問題があります。 vim-ref では同じインターフェースから perldoc, phpmanual, pydoc, refe, man, erlang, clojure のリファレンスを開く事が出来ます。

リファレンスを見る場合は

:Ref source word

上記のようなコマンドを実行します。sourceは perldocやphpmanual、wordは検索をしたい単語です。これらのwordに関しては、キャッシュされ補完を行うことも可能です。また perl や phpのプログラムを開いてる場合は k でカーソル下の単語を開く事も出来ます。

vim-ref ではさらにalcというソースがあります。普段ブラウザで英単語の検索を行う際にはalcを使う場合もよくあると思います。それをvim上で実現することが出来ます。

vim上で英単語を引くことが出来るようになるとそのためにブラウザとの行き来をする必要がなくなるため手間を軽減することが出来ます。

vim-ref-1.png

unite.vim

http://github.com/Shougo/unite.vim

vimでは様々な操作を行ないます。例えば、bufferの選択をしたい、fileの選択をしたい、と無限にあるのですが、それらを統一的に扱う事が出来るようになると非常に便利です。それらを実現するのが unite.vim です。

ちなみに同じカテゴリにいるプラグインとしては fuf.vim や ku.vim 等が存在しますが、unite.vim が現在最も開発が盛んである、高機能であることを考えると unite.vim を利用することはよいと思います。

unite.vim に関してはあまりにも色々出来てしまい簡単に説明することが出来ないので自分がよく使っているコマンドを紹介します。

Unite file -buffer-name=files

とうつと現在のディレクトリのファイルの一覧が出てきます。

vim-unite-1.png

UniteWithBufferDir file -buffer-name=files

と実行すると現在開いているファイルのディレクトリの下の一覧が出てきます。アプリケーションの開発などではルートとなるディレクトリでvimを起動し、そのディレクトリに近いファイルを開く場合は上のコマンド、現在開いてるファイルに近いものを探す場合は下のコマンドを実行するようにしてます。

また、

Unite file_mru

と実行すると、最近開いたファイルを見ることが出来ます。さらに

UniteWithCurrentDir file_mru

と実行することで、カレントディレクトリで絞り込んだ最近開いたファイルを見ることが出来るので、とても便利です。

他にもbufferの一覧、そのタブで開いたbufferの一覧の表示など様々なことが可能で、ここに紹介していることは1%ぐらいしか紹介出来てない気がしますが、日々更新されるuniteのdocを参考にしながら快適なunite生活を目指しましょう。

いざコーディング

vim でコードを書く時に、補完は使っていますか? eclipse とかで出てくるあれです。効率の良い操作を求めるのであれば補完はとても重要です。

neocomplcache.vim

http://github.com/Shougo/neocomplcache

最近、ネオコンなどの名前でよく見かける事もあると思います。以前は、自動補完といえば acp.vim でありましたが今はネオコンも有名になってきました。

acp.vimはvimの組み込みの補完を自動化するというアプローチでしたが、ネオコンでは、独自に補完を行っているため様々な機能が提供されています。

例えば、スニペットの補完が出来ます。スニペットとはよく使うコードのブロックを展開できるような機能です。例えば、phpで

for ($i = 0; $i < 10; $i++) {

}

などとよく書くと思いますが、これに関してforという単語でスニペットを登録すると forと打鍵してスニペットの展開をし、移動をするためのキーを押すことで必要な所だけ編集するということが出来ます。例えばforであれば、変数名($i)、10、{}の中の位置に移動するなどです。

vim-neocon-1.png

スニペットはとても便利な機能ですが登録をしすぎるとどんな単語で何を登録したか分からなくなってしまうという問題があります。そこでネオコンです。ネオコンを使えば補完の内容にスニペットの登録した単語と展開内容が出てくるので、覚える手間を省く事が出来ます。

他にも、インクルード補完、タグ補完等も様々な補完が可能です。

自動補完に関しては人によって相性もあると思いますが、とてもおすすめなプラグインです。

vim-neocon-3.png

vim-quickrun

http://github.com/thinca/vim-quickrun

プログラムを書いた後に試しに実行するためにいちいち、vimを終了してコンソールで起動、エラーがでたのでvimを再度立ち上げ...なんて繰り返しをしていませんか? screenを使って複数のシェルを起動することで、vimを終了しない環境を実現することも出来ますが、シェルの移動がいちいち手間です。

ここで出てくるのが、quickrun.vimです。以前のエントリーではフォントだけが、注目をあびてしまいquickrun.vimの良さが伝わってないような気もしたので、もう一度言いますが、とても便利です。ちょこちょことコードを書いて、実行する時にはとりあえず\rとタイプすれば結果がvimの中で見ることが出来ます。

vim-symfony

http://github.com/soh335/vim-symfony

最後は、symfonyをメインのフレームワークとして開発しているので、それに関するプラグインです。

symfonyやrailsなどのように様々な箇所にファイルが分散されたフレームワークを利用すると、開発の際にコントローラと、テンプレートを行き来したり、モデルのファイルと行き来したりすることが頻繁に起こります。

railsにはrails.vimというとても有名なプラグインがあるのですが、symfonyには残念ながら高機能なものがありませんでしたので、作りました。気が向いたときに色々追加してたらちょっと便利になってきましたが、vimスクリプトが整理されてないので書き換えたいと常々思っています。

アクションと、テンプレートの切り替え、モデルファイルなどへのジャンプ、2種類のモデルファイルの切り替え、テンプレートから、パーティション、コンポーネントにジャンプ、書き出し等が行えます。vimでsymfonyを利用した開発を行っている人は試してみて損はないと思います。

まだまだ、便利なプラグインが存在するので、色々調べて試してみて快適なコーディング生活を手に入れましょう。

カヤックでは、エディタが好きでしょうがない技術者も募集しています!