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