今日のVim

珍しく連投です。もしかしなくても明日は雨が降るだろうなぁ、と思ったyukiinu2ndです。
今日のVimですが、今回はレジスタについてです。

まず、レジスタについて簡単に説明します。
前回の今日のVimでも書きましたが、レジスタは文字列を記録する領域です。
Vim内で文字だけ記録できるクリップボードがたくさんある、そんなイメージでもよいかもしれません。
レジスタは何種類かあります。

レジスタの種類

ユーザが自由に操作できるレジスタ
アルファベットa〜z

アルファベットa〜zのレジスタはユーザが自由に読み書きできるレジスタです。
後述のレジスタ指定の際、アルファベットの小文字で上書き(空にしてから記録)、大文字で追記となります。
このレジスタ以外はVimやOSにより操作されるため、読むことはできますが書くことはできません。

最後にカットやヤンクした文字列が格納されるレジスタ
数値の0

0のレジスタは最後にカットや削除、ヤンク(コピー)した文字列が入っています。
つまり、意識せず(バッファ指定をせず)「y」「d」したものはここに格納され、「p」するとこのレジスタの内容がペーストされます。

カット・削除されたものが処理された順に格納されるレジスタ
数値の1〜9

1〜9のレジスタはカットや削除によって処理された文字列が格納されています。
カットや削除を繰り返す度に数の小さい方から大きい方へ押し出されていきます。

OSのクリップボード参照
アスタリスク

これまでのレジスタVim内に閉じていましたが、アスタリスクだけは例外で、OSのクリップボードとつながっています。
つまり、他のエディタ等でコピーしたものは*レジスタで取り出せますし、逆に*レジスタに書き込むことでクリップボードに記録し、他のエディタで貼り付けることができます。


その他の記号もいくつかあるのですがここでは省略します。
次に、レジスタの操作についてです。

レジスタ

レジスタ一覧を表示
:display

現在のレジスタ一覧を表示します。
前回紹介したマクロ記録をした後、記録したレジスタを見てみるとキーマクロがどのようになっているのかわかると思います。

レジスタ指定
"<レジスタ><レジスタに対する操作>

"(ダブルクォート)の後に文字を指定することで操作対象のレジスタを指定できます。
レジスタ指定後にカットやヤンクを行えば対象のレジスタへ書き込めますし、ペーストならば対象のレジスタに格納されている文字列をその場に貼り付けます。
上記のレジスタの紹介にもありますが、書き込み対象として指定できるのはアルファベットとOSのクリップボード指定である*(アスタリスク)のみです。
ちなみに、範囲指定とレジスタ指定を組み合わせる場合は範囲指定→レジスタ指定→範囲指定した範囲への操作という順番で行います。
例えば3行選択してaレジスタにカットする場合は

V	行選択開始
2j	カーソルを2行下へ移動
"a	aレジスタに対して記録する
d	選択範囲はカットする

このようになります。


このレジスタを活用することで、文字列をいくつも記憶させることができ、クリップボードを拡張するツールも不要になるためかなり便利です。
ただ、自分の場合どのレジスタに何を記録したのかよく忘れるので、「:display」が欠かせません……。