vimのExpression レジスタが面白い
Expression レジスタをはじめて使った。
vimはvimscriptで色々な処理を行えるけど、Expression レジスタは入力中に計算した結果を表示したいとか
関数や式の結果を入力したいという場合に使えるみたい。
例えば、カレントディレクトを表示する場合。
=でExpression入力モードを表示し、getcwd()を入力しエンター - Insertモードで表示されているカーソル部分ににgetcwd()で返されたカレントパスが入力される
出力結果例
/home/foo
良いと思った点
- 組み込み関数だけでなく自分で定義した関数も使える。
- 変数も使える。
- evalも使える。
- 設定によってはtab補完が効く。(vim7だけ?)
- ワンライナーの練習になる。
- vimscriptを触る機会が増える。
- Insertモードから抜けなくても良い。突進。
多用しまくりたい!!
そういえばこの間、職場のEmacsを愛用者の方に(vimを使っているとなにかと意識される)
vimって計算(lisp言語)とかテトリス*1(そこか!)できるの??
って聞かれて、「できますよ。vimscriptという言語で」と答え、こんな簡単な例でデモをしてしまった。
:echo 1 + 2
絶対、Expression レジスタでワンライナー書いて文字を打ち続けた方が面白かったはず・・・ちょっと反省。
あと、こんなRubyの式を評価して返すような関数を用意しておけば、Rubyも使用することできた。*2
" Ruby評価 関数 function! RubyEval(param) ruby << EOF # 引数の文字列をevalで評価し、文字列として返す。配列とかは考慮していない。 VIM::command("return '" + (eval VIM::evaluate("a:param")).to_s + "'") EOF endfunc
Expression レジスタモードで実行
=RubyEval('[1,3,5,7].size')
結果が入力される
《<C-R>=でRubyEval関数を実行すると》4