vim-users.jp

Hack #131: Rubyで#{をラクに入力する

Posted at 2010/03/13
このエントリーをはてなブックマークに追加

問題

Rubyでは文字列リテラルの中に#{}で囲まれた式を書くと展開されます。

puts "It is now #{Time.now}."
#=> It is now Wed Feb 17 16:28:18 -0800 2010.

しかしながら、毎日#{を何度も打鍵することは、あなたの指の骨に深刻なダメージを与えることでしょう。

様々な解決方法がありますが、著者が最も直感的と感じるのは以下の方法です。

  • {{ と打鍵すると自動的に#{と置き換えられる

すぐに思い浮かぶ解決方法は、iabbrevを用いて{{#{に置き換えることです。

iabbrev {{ #{

この方法はうまくいきません。{{のあとにスペースを打鍵する必要がありますが、Rubyの慣習では#{のあとにスペースをいれずすぐに式を書くことになっている場合が多いためです。

それならばiabbrevではなくinoremapだ、と思い付くのではないでしょうか。

inoremap {{ #{

この方法はうまくいきません。実際に試してみるとすぐに分かりますが、{を打鍵してすぐに{が画面にでてこないことにイライラする日々を送ることになります。Rubyでは#{よりもブロックとしての{を書くことの方が頻度は高く、メリットよりもデメリットの方が遥かに大きいのです。

解決

smartchrを使います。

smartchrをインストールし、~/.vim/ftplugin/ruby.vimに以下を記述します。

inoremap <expr> <buffer> {  smartchr#loop('{', '#{', '{{{')

これで、{を続けて打鍵していくと以下のようになります。

{
#{
{{{
{
#{
{{{
...

inoremapのときと違い、はじめの{が即座に画面に表示されます。

発展

他のRuby用ftpluginと共存させるため、筆者は~/.vim/ftplugin/ruby.vimではなく、~/.vim/ftplugin/ruby/ujihisa.vimに上記の設定を含めて記述しています。

http://github.com/ujihisa/config/blob/master/vim/ftplugin/ruby/ujihisa.vim

ujihisa

もどる
blog comments powered by Disqus