vim-users.jp

Hack #57: 空行を挿入する

Posted at 2009/08/15
このエントリーをはてなブックマークに追加

問題

一旦書き上げたソースコードを整理するとき、空行を挿入する機会が比較的多くあります。 空行を挿入する一般的な方法は以下の二つです。

  1. 挿入モードで<Cr>を打鍵
  2. ノーマルモードでoを打鍵 (Oならば現在行の上に空行を挿入)

しかしながら、上記二つの方法の両方には、以下に述べる二つの副作用があります。

  1. 動作実行後必ず挿入モードに入ります。ノーマルモードに戻るためには<Esc>などを打鍵する必要があります
  2. インデントやコメントなどが自動的に挿入

ソースコード全体を俯瞰して一気に整形するときなど、これらの副作用は望ましくない場合が多いです。 動作実行後もノーマルモードを維持し、なおかつ必ず空行が挿入されるようにする簡単な方法が望まれます。

解決

~/.vimrcに以下の一行を書きます。

nnoremap O :<C-u>call append(expand('.'), '')<Cr>j

以後、Oを打鍵するだけでカーソル位置の次の行に空行を挿入します。 その際、動作実行後もノーマルモードを維持し、なおかつ必ず無駄な文字が入ることなく空行が挿入されます。

議論

コメント行で挿入モードで改行した場合、コメントが継続されるよう設定している方は多いと思います。 例えばRubyで

#_

という状態で (_はカーソルを示す) 、挿入モードでの<Cr>やノーマルモードでのoなどで改行文字を挿入すると、

#
#_

となります。 上記~/.vimrcへの設定では、この自動挿入を避けるためappend()関数を用いました。

先ほど紹介した

nnoremap O :<C-u>call append(expand('.'), '')<Cr>j

はまずappend()で現在の行expand('.')の直後に空文字列''だけの行を挿入し、そしてその挿入した行にjで移動するという一連の操作をOに割り当てています。

逆に、この自動挿入を行いたい場合は、通常の改行を行なえばよいため

nnoremap O o<Esc>

とすることで実現できます。

ujihisa

もどる
blog comments powered by Disqus