まくまくVimノート
切り取り&貼り付け操作、レジスタの扱いについて理解する
2006-12-13

切り取り、ヤンク(コピー)、貼り付けの基本【無名レジスタ】

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 コマンドで同様のことを行う場合は、コマンドの後ろにスペースを入れてからレジスタ名を指定します。

ex コマンド

:10,20ya a  -- 10 行目から 20 行目までを "a にヤンク(コピー)
:pu a  -- "a の内容をカーソルの後ろに貼り付け

挿入モードでは Ctrl-R に続けてレジスタ名を入力することで、その内容を挿入することができます。

挿入モード

^Ra    -- レジスタ a の内容を挿入

名前付きレジスタに格納したテキストにアペンドする

レジスタ名を大文字で指定することにより、名前付きレジスタに既に格納されている内容に対して、テキストをアペンドすることができます。

ノーマルモードでの操作

"A yy  -- カレント行の内容をレジスタ "a にアペンド

OS のクリップボードへのコピー/貼り付け(レジスタ: “*)(for Windows)

クリップボード・レジスタ "* は OS のクリップボードとの同期用に用意されています。 レジスタ "* に対して y, p コマンドなどを実行すると、OS のクリップボードのテキストをコピーしたり、貼り付けたりすることができます。

"*yy    -- クリップボードへカレント行をコピー
"*p     -- クリップボードの内容を貼り付け

設定: クリップボードの内容と無名レジスタの内容を同一にする

OS クリップボードとの同期のために、いちいち "* レジスタを指定するのが面倒な場合は、

:set clipboard+=unnamed

と設定しておくと、自動的にクリップボード・レジスタ "* の内容と無名レジスタ "" の内容が同期されるようになります。 その結果、レジスタを指定しないでもクリップボードへのコピー、クリップボードからの貼り付けが可能になります。

詳しく仕組みについては :help gui-clipboard を参照してください。

番号付きレジスタ (レジスタ: “1 ~ “9)

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 を再起動しても前回格納した値を取得することができます。

2006-12-13