コピー先を使い分ける
コピーしたあとに別の行を消すと、コピーした内容が上書きされてしまう。Vimを使い始めて最初に困るのがこれです。原因は削除もコピーも同じ置き場を使っているからで、置き場を指定すれば解決します。
置き場が1つではない
これまで yy や dd で取った内容は、名前のない置き場(無名レジスタ)に入っていました。レジスタはそれだけではなく、a から z の26個と、いくつかの特別なものがあります。
使いたいレジスタは操作の前に " と名前で指定します。"ayy なら a にコピー、"ap なら a から貼り付けです。指定しなければ今までどおり無名レジスタが使われます。
"0 と "_ を覚えておけば足りる
26個を使い分けるのは慣れが要りますが、実際に困るのは「コピーしたのに、そのあと何か消したせいで貼れなくなった」場面がほとんどです。これは "0p で解決します。0 にはヤンクした内容だけが入り、削除では書き換わらないためです。
先回りするなら、消すときに "_dd と書けばコピーは無事のままです。まずこの2つを覚えて、名前付きレジスタは必要になってから足すのがおすすめです。
中身を確認する
どのレジスタに何が入っているかは :registers(略して :reg)で一覧できます。貼り付ける前に確認したいときに使います(この練習ページでは扱っていません)。
挿入モード中に Ctrl-r に続けてレジスタ名を打つと、入力しながら貼り付けられます。コマンドラインでも同じように使えます。
大文字のレジスタ名は追記になる
レジスタ名を大文字で指定すると、上書きではなく追記になります。"ayy で1行取ったあと、別の行で "Ayy と打つと、a の中身は2行ぶんになります。
ファイルのあちこちから必要な行だけを拾い集めて、まとめて別の場所へ貼りたいときに使えます。集め終わったら "ap で一度に貼り付けます。集める前に "ayy で始めるのを忘れると、前回の中身に足されてしまうので順番に気をつけてください。
自分では書き込めない特別なレジスタ
Vimが自動で埋めているレジスタもあります。"% には開いているファイル名、". には最後に挿入したテキスト、": には最後に実行したコマンド、"/ には最後に検索した文字列が入っています。
たとえばファイル名を本文に書きたいとき、挿入モードで Ctrl-r % と打てばパスを打ち直さずに済みます。検索した語をそのまま置換に使いたいときは :%s/Ctrl-r //new/ という書き方ができます。
レジスタはVimを閉じても残る
レジスタの内容はVimの終了時に保存され、次に起動したときに復元されます。保存先はVimでは viminfo、Neovimでは shada と呼ばれるファイルです。
そのため、昨日コピーした内容が今日も "ap で貼れます。逆に、機密情報をレジスタに入れたままにするとファイルに残るので、扱う内容によっては viminfo の設定を見直してください。
このレッスンで扱うキー
| キー | 動き |
|---|---|
| "ayy | レジスタ a にコピー |
| "ap | レジスタ a から貼り付け |
| "0p | 最後にヤンクした内容を貼り付け |
| "_dd | 残さずに削除 |