← Vim道場

コピー先を使い分ける

コピーしたあとに別の行を消すと、コピーした内容が上書きされてしまう。Vimを使い始めて最初に困るのがこれです。原因は削除もコピーも同じ置き場を使っているからで、置き場を指定すれば解決します。

第4章 範囲を扱うレッスン 19 / 36

置き場が1つではない

これまで yydd で取った内容は、名前のない置き場(無名レジスタ)に入っていました。レジスタはそれだけではなく、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残さずに削除

関連記事

レッスン一覧へ戻るキーの逆引き一覧検定を受ける