レジスタと聞いたとき「何それ美味しいの?」状態でしたが、一度レジスタの知識を身に付け、使い始めるとその便利さに驚きます。今ではレジスタなしではvim操作は考えられないです。この記事では、そんな便利なvimのレジスタの使い方を解説します。
レジスタとは
レジスタはヤンク(コピー)した文字列を格納したり、逆にプット(ペースト)元として使用する保存領域です。
レジスタには無名レジスタや、a-zの名前が付いた名前付きレジスタなどがあります。レジスタにアクセスするにはダブルクォテーションの後にレジスタ名を指定します。普段使っているヤンクやカットのコマンドの前にレジスタを指定すると、テキストが指定したレジスタに保存されます。
例えば“adiwとすると、カーソルがある単語をカットしそれをaレジスタに保存します。“apとするとaレジスタに保存したテキストをプットすることが出来ます。
レジスタの具体的な使い方
具体的な例を見た方がレジスタの使い方を理解できるので、次のテキストの”arg”と”flag”のテキストの位置を入れ替える場合を考えます。
somefunc(arg, flag)
レジスタを使わずに失敗する
“arg”にカーソルを移動させdiwで”arg”をカットします。次に”flag”にカーソルがある状態でdiwで”flag”をカットします。Pで”arg”を”flag”が元々あった場所に貼り付けようとすると、直前にカットした”flag”が貼り付けられてしまいます。
失敗の原因
これはヤンク、プット、カット時などにレジスタを指定しなければデフォルトの無名レジスタにテキストが保存されるためです。プット時も同じくレジスタを指定しなければ無名レジスタの内容が取得されます。
今回の場合、”arg”をカットしたときは無名レジスタには”arg”というテキストが保存されていますが、”flag”をカットしたときに無名レジスタの内容、”arg”で上書きされたため、プットしたときに”arg”が貼り付けられてしまいました。
レジスタを使って2つの単語を入れ替える
レジスタを指定するにはdiwやpの前に“{レジスタ名}を入力して、保存先、取得元のレジスタを指定します。今回はaというレジスタに”arg”を保存し、”flag”を無名レジスタに保存して、”arg”と”flag”の2つの単語を入れ替えてみます。
まず”arg”にカーソルがある状態で、“adiwで”arg”をカットし、”arg”というテキストをaレジスタに保存します。次に”flag”にカーソルがある状態でdiwをして”flag”をカットし、”flag”というテキストを無名レジスタに保存します。
あとは”flag”が元々あった位置で、“apでaレジスタに保存しておいた、”arg”というテキストをプットし、”arg”が元々あった位置で、Pとすることで無名レジスタに保存しておいた、”flag”というテキストをプットして、2つの単語を入れ替えることが出来ます。
よく使うレジスタの種類
aレジスタ以外にも様々な特徴を持ったレジスタが存在します。ここでは筆者自身がよく使うレジスタをいくつか紹介します。
レジスタ | 説明 |
“” | 無名レジスタ。ヤンク、プット、カット時にレジスタを指定しない場合に使われるデフォルトのレジスタ。明示的に無名レジスタを指定する場合は””でレジスタを指定します。例.””p無名レジスタの内容をプット。 |
“a-“z | 名前付きレジスタ。”aから”zまでの26個の名前が付いたレジスタ。 |
“+,”* | 選択レジスタ(Selection register)。クリップボードの内容が保存されているレジスタ(windows/macユーザー)。このレジスタを使えばvimの内容ヤンクして、vim以外のアプリケーションにペーストすることが出来ます。逆にvim以外のアプリでコピーした内容をvimでプット出来ます。 |
“_ | ブラックホールレジスタ(Black hole register)。名前から想像できるように削除専用のレジスタで、linuxでいうところの/dev/nullのような存在です。このレジスタを指定してプットしても何もプットされないです。カットしたいけど、どのレジスタも上書きしたくないときなどに、このブラックホールレジスタを指定すれば、他のレジスタを上書きしないで済みます。 |