この記事では、Vim / Neovim での「レジスタの値を貼り付けるキーバインド」について、ご紹介します。
[解答] 9種類
各モードによって利用できるキーバインドが異なります。
ノーマルモード / ビジュアルモード
p
カーソルの後に、無名レジスタの値を貼り付けます。
ちなみに、数字を入力した後で p を入力すると、カーソルの後に数字の回数分、無名レジスタから貼り付けます。00ちなみに、数字を入力した後で p を入力すると、カーソルの後に数字の回数分、無名レジスタから貼り付けます。
この回数を指定する機能は、ノーマルモードおよびビジュアルモードのいずれのキーバインドでも利用可能です。
Shift + p (大文字P)
カーソルの前に、無名レジスタの値を貼り付けます。
小文字p で実行した時と同様に、数字を入力した後で p を入力すると、カーソルの後に数字の回数分、無名レジスタから貼り付けます。
" + {レジスタ名} + p
このキーバインドでレジスタ名を指定して、その値をカーソルの後に貼り付けることができます。
ちなみに、レジスタ名は {a-zA-Z0-9.%#:-“} のいずれか一文字を指定します。
{a-zA-Z0-9.%#:-“} 続く操作 (削除、コピー、貼り付け) にレジスタ
VIMリファレンスマニュアル change.jax
{a-zA-Z0-9.%#:-“} を使う (削除、コピーでは大文字を使う
ことでレジスタに追記できる)
({.%#:} は貼り付けにのみ使用可能)。
上記、公式ヘルプに記載がある通り、貼り付け以外の操作でも活用する指定方法です。
" {レジスタ名} Shift + p(大文字P)
このキーバインドでレジスタ名を指定して、その値をカーソルの前に貼り付けることができます。
インサートモード
Ctrl + @
レジスタ「.」(最後に挿入されたテキスト)を貼り付けた後、インサートモードを終了します。
公式のヘルプでは下記の通りに記載がありますが、レジスタを使用するのと同じ仕組みです。
直前に挿入されたテキストをもう一度挿入し、挿入を終了する。
VIMリファレンスマニュアル change.jax
Ctrl + Shift + a (Ctrl + 大文字A)
レジスタ「.」(最後に挿入されたテキスト)を貼り付けます。インサートモードは終了しません。
公式のヘルプでは下記の通りに記載がありますが、レジスタを使用するのと同じ仕組みです。
直前に挿入されたテキストをもう一度挿入する。
VIMリファレンスマニュアル change.jax
上記2つは貼り付ける内容が同じですが、貼り付けた後の動作が異なります。
Ctrl + r {レジスタ名}
このキーバインドでレジスタ名を指定して、その値をカーソルの後に貼り付けることができます。
ちなみに、レジスタ名は {a-zA-Z0-9.%#:-“} のいずれか一文字を指定します。
Ctrl + r Ctrl + r {レジスタ名}
このキーバインドでもレジスタ名を指定して、その値をカーソルの後に貼り付けることができます。
ちなみに、Ctrl-R を2回指定するキーバインドが、1回指定するキーバインドと異なるのは下記の公式ヘルプをご覧ください。
CTRL-R CTRL-R {0-9a-z”%#*+/:.-=} i_CTRL-R_CTRL-R
VIMリファレンスマニュアル change.jax
レジスタの内容を挿入する。CTRL-R が1つの時と同様に働くが、タイ
プされたようにではなく、テキストは文字通りに挿入される。これは
レジスタに<BS>のような文字が含まれていた場合に違いを生じる。例
えば “ab^Hc” という内容のレジスタaがあった場合:
CTRL-R a 結果は “ac”.
CTRL-R CTRL-R a 結果は “ab^Hc”.
かなり分かりづらいですが、レジスタに特殊な値が含まれる場合に無視するか、そのまま貼り付けるかの違いです。
通常は、そこまで意識する必要はないでしょうk。
Ctrl + r Ctrl + o {レジスタ名}
このキーバインドでもレジスタ名を指定して、その値をカーソルの後に貼り付けることができます。
先の2つの指定方法と異なる点は、下記の公式ヘルプをご覧ください。
CTRL-R CTRL-O {0-9a-z”%#*+/:.-=} i_CTRL-R_CTRL-O
VIMリファレンスマニュアル change.jax
レジスタの内容が文字通り挿入され、自動インデントも行われない。
マウスによる貼り付け <MiddleMouse> と同様である。レジスタが
linewise の時は、テキストを P と同様に現在行の上に挿入する。
キャラクタは置き換えられない!
‘.’ レジスタ(最後に挿入されたテキスト)は、タイプされたように挿
入される。
自動インテントなどを無視して貼り付けてくれる機能です。
こちらも利用する頻度が少ない機能でしょう。
コマンドラインモード
Ctrl + r {レジスタ名}
インサートモードと同じように、 このキーバインドでレジスタ名を指定して、その値をカーソルの後に貼り付けることができます。
ちなみに、レジスタ名は {a-zA-Z0-9.%#:-“} のいずれか一文字を指定します。
Ctrl + r Ctrl + r {レジスタ名}
こちらもインサートモードと同じように、 このキーバインドでレジスタ名を指定して、その値をカーソルの後に貼り付けることができます。
この場合、特殊文字列を含めて貼り付けてくれます。
Ctrl + r Ctrl + o {レジスタ名}
こちらもインサートモードと同じように、このキーバインドでもレジスタ名を指定して、その値をカーソルの後に貼り付けることができます。
この場合、やはり自動インテントなどを無視して貼り付けてくれます。
Vim レジスタ 貼り付けキーバインド 早見表
モード名 | ノーマル | ビジュアル | インサート | コマンドライン |
---|---|---|---|---|
p | ○ | ○ | – | – |
Shift + p | ○ | ○ | – | – |
” {レジスタ名} p | ○ | ○ | – | – |
” {レジスタ名} Shift + p | ○ | ○ | – | – |
Ctrl + @ | – | – | ○ | – |
Ctrl + Shift + a | – | – | ○ | – |
CTRL-R {レジスタ名} | – | – | ○ | ○ |
CTRL-R CTRL-R {レジスタ名} | – | – | ○ | ○ |
CTRL-R CTRL-O {レジスタ名} | – | – | ○ | ○ |
このVimコマンドの補足情報
- 利用頻度
- 便利さ
- 覚え易さ
関連するVimヘルプ
Vimからは、下記のコマンドでヘルプを確認できます。
:help p :help P :help quote :help i CTRL-@ :help i CTRL-A :help i CTRL-R :help i CTRL-R CTRL-R :help i CTRL-R CTRL-O
ヘルプで検索するときは、通常は大文字小文字は識別されませんので、どちらでも構いません。
参考書籍
こちらの書籍が参考になります。
Vim/neovim関連の書籍で、もっとも評判が良くてバイブルと呼んでる人もいる一冊です。Vim/neovimのバージョンに依存しない沢山のTips形式で、その表題通りに「思考のスピードで編集」できるようになるノウハウが詰まっています。その高い評価は Amazon のレビューからも分かる通りです。Vimmer なら必ず一度は読んでおいて間違いありません。
こちらもVim関連の書籍で評価が高い書籍の一冊です。vim-jpで見かける上級Vimmer(Vimサポーターズ)の皆様による、Vimを実践で使ったノウハウからプラグイン関連の情報が詰まっています。日本の Vim界隈を知る上でも是非一読しておきたい一冊です。
Vim/neovim の設定ファイルやプラグインなど、Vim script に関するノウハウがいくつも詰まった一冊です。日本で Vim Script をここまで深く解説している唯一の書籍と言えます。Vim力を伸ばしたいと考えるなら、絶対に避けては通れない書籍でしょう。