d
, x
コマンドなどでテキストを削除したときや、y
コマンドでテキストをヤンクした場合、そのテキストは 無名レジスタ ""
に保存されます。
無名レジスタの内容は p
, P
コマンドで貼り付けることができます。
dd -- カレント行を削除
yy(Y) -- カレント行をヤンク
p -- 貼り付け
D -- カーソル位置から行末までを削除
C -- カーソル位置から行末までを置換(削除して挿入モードへ)
s -- カーソル位置の 1 文字を削除して挿入モードへ
S -- カーソルのある行を削除して挿入モードへ
x
, d
, y
などの削除/ヤンクコマンドの前に、名前付きレジスタ を指定すると、そのレジスタにテキストの内容を保存できます。
名前付きレジスタには、"a
から "z
までのいずれかを指定します。
p
, P
コマンドの前に名前付きレジスタを指定すれば、そのレジスタの内容を貼り付けることができます。
"a yy -- カレント行を "a にヤンク(コピー)
"a dd -- カレント行を "a に切り取り
"a 3d -- 3 行を "a に切り取り
"a p -- "a の内容をカーソルの後ろに貼り付け
"a P -- "a の内容をカーソルの前に貼り付け
ex コマンドで同様のことを行う場合は、コマンドの後ろにスペースを入れてからレジスタ名を指定します。
:10,20ya a -- 10 行目から 20 行目までを "a にヤンク(コピー)
:pu a -- "a の内容をカーソルの後ろに貼り付け
挿入モードでは Ctrl-R
に続けてレジスタ名を入力することで、その内容を挿入することができます。
^Ra -- レジスタ a の内容を挿入
レジスタ名を大文字で指定することにより、名前付きレジスタに既に格納されている内容に対して、テキストをアペンドすることができます。
"A yy -- カレント行の内容をレジスタ "a にアペンド
クリップボード・レジスタ "*
は OS のクリップボードとの同期用に用意されています。
レジスタ "*
に対して y
, p
コマンドなどを実行すると、OS のクリップボードのテキストをコピーしたり、貼り付けたりすることができます。
"*yy -- クリップボードへカレント行をコピー
"*p -- クリップボードの内容を貼り付け
OS クリップボードとの同期のために、いちいち "*
レジスタを指定するのが面倒な場合は、
:set clipboard+=unnamed
と設定しておくと、自動的にクリップボード・レジスタ "*
の内容と無名レジスタ ""
の内容が同期されるようになります。
その結果、レジスタを指定しないでもクリップボードへのコピー、クリップボードからの貼り付けが可能になります。
詳しく仕組みについては :help gui-clipboard
を参照してください。
d
コマンドにより削除したテキストは、番号付きレジスタ("1
~ "9
)に直近の削除内容が 9 つまで保持されます。
例えば、最後に削除したテキストはレジスタ "1
に格納されており、3 つ前に削除されたテキストはレジスタ "3
に格納されています。
これらの内容はいつでも取り出して貼り付けることができます。
"3p -- 3 つ前に削除されたテキストを貼り付け
番号付きレジスタに保存されるのは、削除したテキストだけで、ヤンク(コピー)したテキストは保存されないことに注意してください。
ヤンク/削除したテキストは自動的に無名レジスタ ""
や、番号付きレジスタ ("1
~ "9
) に格納されますが、どのレジスタにもテキストの内容を保存したくない場合は、ブラックホールレジスタ "_
を指定して削除を実行します。
"_dd
下記のコマンドを実行することで、現在レジスタに保持されている値を一覧表示できます。
:reg[isters] -- すべてのレジスタの内容を表示
:reg[isters] abc -- レジスタ a, b, c の内容を表示
:reg
--- レジスタ ---
"" hoge
"1 aaa
"2 bbbasdf
"3 Hello
"4 abc^J
"5 bbb
"6 CCC
"7 ddd
"8 EEE
"9 asdf sdf
"a dd
"b I// ^[
"c kvvkvk
"-
"* クリップボード
".
": やほ
"/
レジスタの内容は、ファイル (~/.viminfo
) に保存されているため、Vim を再起動しても前回格納した値を取得することができます。