あまりにも複雑怪奇すぎて混乱したのでまとめ。
わかりにくかった部分だけまとめた。全レジスタを網羅しているわけではないので注意。
前置き
以下で出てくるレジスタを指定するとは、
- ノーマルモードで "x (xはレジスタ名)を前置する。
- :delete :yank コマンドの引数に指定する。
ことを指す。
操作の種類
- 削除系
- d x :delete
- 変更系
- c cc C s S
- コピー系
- y Y :yank
置換系(r R gR)や:changeではレジスタは変更されない模様。
:helpの内容をまとめたもの。全リストではない。
- 削除、変更、コピー系コマンドが使用された際に変更される。
- レジスタを指定していても変更される。
"0 (番号つきレジスタ)
- コピー系コマンドが使用された際に変更される。
- ただし、レジスタを指定していた場合は変更されない。
"1 (番号つきレジスタ)
- 削除、変更系コマンドが使用された際に変更される。ただし、
- レジスタを指定していた場合は変更されない。
- 対象テキストが1行以下(改行を含まない)場合は変更されない。ただし、
- % ( ) ` / ? n N { } これらの移動コマンドを使った場合は例外。
"2-9 (番号つきレジスタ)
- "1 が変更された際、 "2 以降のレジスタは "9 に向かってシフトし、 "9 は消える。
- 番号つきレジスタにコピーした場合、普通にコピーされた後、 "1 が変更されているようならばシフトされる。
"- (小削除用レジスタ)
- 削除、変更系のコマンドが使用された際に変更される。
- ただし、レジスタを指定していた場合は変更されない。
- 場合によっては "1-9 と同時に変更される可能性もある。
まとめ
○の付いている箇所が、レジスタが変更される。それぞれの表は実際に試しながら埋めた。条件等に抜けがある可能性がある。
削除、変更系 (""以外のレジスタを指定)
レジスタ |
"" |
"0 |
"1 |
"- |
指定したレジスタ |
レジスタ無指定 |
○ |
× |
対象か2行以上か、特定の移動コマンドを使った場合○ |
対象が1行以下の場合○ |
- |
""レジスタ指定 |
○ |
:delete の場合は×、それ以外は○ |
○ |
× |
- |
""以外のレジスタを指定 |
○ |
× |
○ |
× |
○ |
コピー系 (レジスタ無指定)
レジスタ |
"" |
"0 |
"1 |
"- |
指定したレジスタ |
レジスタ無指定 |
○ |
○ |
× |
× |
- |
""レジスタ指定 |
○ |
○ |
× |
× |
- |
""以外のレジスタを指定 |
○ |
× |
× |
× |
○ |
:let @" = |
○ |
○ |
× |
× |
- |
:let @a-z = |
× |
× |
× |
× |
○ |
なぜか
一部予想とそぐわない結果になった。バグだろうか。余計混乱する羽目になった。ちなみに試したのは Vim 7.2.132 KaoriYa ver.
Tips
""と"@は同じ意味らしい。 :help に見当たらないけど多分そう。