先日の開発環境勉強会で@t9mdさんによるphrase.vimについての話を聞いて興味もったので入れてみた。
簡単にどんなプラグインか説明すると、コード片(phrase)をサクっと保存できてサクっと呼び出せるというもの。コード書いてる途中にvimから出てグーグルとかで検索すると思考が中断されてしまう感覚になるためvim内で再利用できるコード片の検索・適用をしたいと思い作ったとのことです。
また、作者の@t9mdさんの意図としては自分の書いたコード片だけではなく色々な方のコード片をサクっと実行してパワーアップ(学ぶ)するためのものということみたいです。
発表ではphrase.vimと共にtryit.vimというプラグインと合わせて紹介していました。
@t9mdさんのスライドはこちら。
ちょうど欲しかった
私はよく「前あのコード書いたけどどこいったっけ?うーん、どこかのサイト参考にしたコードやしまたググるか・・・」みたいなことがよくあって、それに結構煩わしさを感じていました。そこで一度書いたコードやwebで調べたサンプルコードなどをリポジトリで管理しようと思って少し試してみたのですが、メインの作業とは別にサンプルとしてまとめる作業が発生するためめんどくさくて続かない臭いがプンプンしてました。
でも物覚えも良くないし、コードを読み書きする技術に優れているわけではないのでどうにかしてうまくできればと思ってました。単純な書き方であればperldocなどで割とサクっと調べられる場合もありますが、実際の挙動を試してみたい時などはやはり動く形にして実行して結果を見るということもよくやります。
スニペットとは異なるコードとしてのそこらへんの問題をphrase.vimは解消してくれそうです。
入れた
私はvundleではなくpathogenでvimのプラグインを管理していますので.vim/bundleしたにgitのリポジトリからサブモジュールとして入れるだけで終了。
vim-scripts/phrase.vim - GitHub
プラグインをロードしてvim立ち上げ直すとエラーが出ました。
E486: パターンはみつかりませんでした: phrase_ft_tbl = {} function <SNR>24_init_ft_tbl の処理中にエラーが検出されました: 行 8: E121: 未定義の変数です: g:phrase_ft_tbl E116: Invalid arguments for function extend
vimスクリプトには詳しくないので合ってるかどうかわからないですが、変数phrase_ft_tblが定義されてない状態で評価しようとしてる箇所でエラーが出てるように見えました。
なので.vimrcに下記を追加してみたところエラーが出なくなりました。
let g:phrase_ft_tbl = {}
設定
呼び出しのキーバインドはほぼデフォルトと同じですね。私も,(カンマ)を良く使ってます。
次はphraseファイル用ディレクトリの準備です。
.vim/phrase/dameninngenn/phrase.* となるようにします。
phraseファイルは別途リポジトリで管理したい+他の人のphraseファイルを追加する可能性があるということから新規にリポジトリを準備し.vim/phrase/ 下にサブモジュールとして入れました。
% git submodule add git://github.com/dameninngenn/phrase-dameninngenn.vim.git phrase/dameninngenn
こんな感じですね。
これで準備おkです。
運用ポリシー
phraseにはタグのようなものを付けることができるのでUniteで絞りこむ際にやりやすいように付けようと思ってしばらくは下記の方針でやろうかなと。
Phrase: メインモジュール名 備考 [検索用タグ]
例えば例を挙げると今はこんな感じです。
Phrase: Furl basic [furl http url uri] Phrase: Encode::Guess [encode decode guess]
モジュール名でも用途でも絞りこめるようになりました。
注意
幸福が実現しそうな気がするのですが例えばwebで調べたサンプルコードなどを保存しておく場合はライセンスまわりは気をつけましょう。
ライセンスフリーでも参照元がある場合は参照元URLなどをコメントに入れておこうと思ってます。