vimのExpression レジスタが面白い

Expression レジスタをはじめて使った。


vimはvimscriptで色々な処理を行えるけど、Expression レジスタは入力中に計算した結果を表示したいとか
関数や式の結果を入力したいという場合に使えるみたい。


例えば、カレントディレクトを表示する場合。

  1. =でExpression入力モードを表示し、getcwd()を入力しエンター
  2. 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

なんかvimRubyが同時に使えると楽しい。

*1:テトリスはwww.vim.orgからvimscriptダウンロードしてできます

*2:要:vim-ruby