CLIツール

【保存必須】Vimレジスタ完全解説 これだけは知っておきたい10種類のレジスタ

reisuta

Webエンジニア | 20代中盤 | 大学時代はGmailすら知らないIT音痴でプログラミングとは無縁の生活を送る → 独学でプログラミングを学ぶ → Web系受託開発企業にエンジニアとして就職 → Web系自社サービス企業に転職 | 実務未経験の頃からVimを愛好しており、仕事でもプライベートでも開発はVimとTmuxを使っているので、VSCodeに疎いのが最近の悩み。何だかんだでやっぱりRubyが好き。

最近では、Neovimのプラグインが優秀すぎて、
素のVimの機能を使用しなくても、
十分便利に使うことがなってきたかもしれません。

しかし、プラグインを使わずとも、
Vimには、便利な機能がたくさんあり、
それらを使いこなしてこそ、
真のVimmerであり、Vim教徒です。

本記事では、そんなVimの機能の中でも
やや応用的でありながら、絶対に外すことはできない、
レジスタについて完全解説します。

本記事の動画は、下記になります。
やや抽象的な説明が多いので、
動画でのハンズオンのほうがわかりやすいかもしれません。

レジスタとは?

レジスタとは、
Vim独自のクリップボードのようなもので、
ヤンク(yy)や削除(dd)とかしたものを、
このレジスタという領域に格納しています。

https://vim-jp.org/vimdoc-ja/usr_10.html

ヤンクや削除といった、
Vimの基本コマンドを復習したい方は、
こちらの記事をご参考ください。

参考ターミナルインストールから始めるVim/Neovim8つの基本キーバインド

本記事では、0からVimやNeovimについて、解説していきます。 Vimって何?っていう人や、ターミナルもほとんど使っていないという人でも、最低限これだけは知っておきたいVimのキーバインドを本記事 ...

続きを見る

さて、レジスタの中身を確認するには、

:reg

で確認できます。

実行すると、こんな感じで、
現在のレジスタに格納されている一覧を確認することができます。

Nameという列に、
0とか1のような数字から、
aとかjみたいなアルファベット、
%や:のような記号が存在します。

これらは、レジスタの名称なのですが、
それぞれ異なる役割を持っています。

これらについて順に解説していきます。

レジスタの種類

以下、順番にそれぞれのレジスタの名称と、
役割について解説していきます。

無名レジスタ ("")

無名レジスタとは何でしょうか?

これは、平たく言うと
デフォルトのレジスタのような感じです。

  1. 無名レジスタ "" quote_quote quotequote
    このレジスタには、コマンド "d", "c", "s", "x" 等で削除されたテキストや、"y" 等
    のコピーコマンドでコピーされたテキストが蓄えられる。特定のレジスタが指定されて
    いてもいなくても関係ない (例えば "xdd でもこれが使われる)。つまり無名レジスタ
    は最後に使われたレジスタを指していると考えられる。よって、大文字レジスタを使っ
    て名前つきレジスタにテキストを追加したときも、無名レジスタの中身は、その名前つ
    きレジスタと同じになる。
    例外はレジスタ '_' である。"_dd は、削除されたテキストをどのレジスタにも蓄え
    ない。
    無名レジスタの中身は、レジスタを指定しない貼り付けコマンド (p や P) で使うこと
    ができる。加えて、このレジスタは '"' という名前で使うことができる。これは、使
    うときには二重引用符 '"' を 2 個打ち込むということである。レジスタ "" に対する
    書き込みはレジスタ "0 にも書き込むことになる。
    {Vi ではレジスタの内容はファイルを変更するときに失われ、'"' もない}
vim help (:h "")

つまり、何も考えず、
ヤンクとかコピーとか削除をしていると、
この無名レジスタに格納されて、
貼り付けの際も、単にpとかで行うと、
この無名レジスタの内容が貼り付けられるということです。

そしてこの後、順に解説しますが、
aとかの名前付きレジスタを指定して、
そこにヤンクとかをしても、
この無名レジスタにも同じものがヤンクされます。

ちなみに、削除・ヤンク・プットは、
レジスタを指定して実行することができます。

"{register}
・名前付きレジスタ(a)からpを実行したい場合
"ap
・無名レジスタ("")からpを実行したい場合
p または ""p
→ レジスタを指定しないと無名レジスタが使われる。

 すなわち、"と押した後に、
register名を指定すると、
そのレジスタの内容を、ヤンクなりできるという感じです。

ヤンクレジスタ("0)

yコマンドを使うと、
無名レジスタに加えて、
ヤンクレジスタにもコピーされます。

ヤンクレジスタは、0のことです。

このレジスタは、dとかxのようなコマンドを使っても、
書き変わらないので、ヤンクしたものを貼り付けるために、
ddしたら、レジスタが上書きされちまった問題を
防ぐことができます。

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

こちらは、削除とか変更をした際に、
1から順番に9までのレジスタにその内容が格納されていく。

ヤンクレジスタに対する、削除レジスタみたいな感じです。

名前付きレジスタ("a ~ "z "A ~ "Z)

これらのレジスタは、ユーザーが自由に使えるレジスタにあたります。
なにかをレジスタに格納したいとき、
番号付きレジスタとかに入れてしまうと、
ddとかを繰り返すうちに消えてしまうおそれがあるが、
名前付きレジスタは、指定しない限りは書き換わりません。

小文字と大文字の違いは、
小文字指定の場合、すでに格納されている内容が消えるのに対し、
大文字指定の場合、すでに格納されている内容への追記になります。

小削除用レジスタ ("-)

これはあまり聞かないレジスタかもしれません。
(それにあまり使う機会も多くないかなと思います。)

helpでは、

  1. 小削除用レジスタ "- quote_- quote-
    このレジスタには、範囲が1行以下の削除コマンドで削除されたテキストが蓄えられる。
    ただし、コマンドに ["x] で別のレジスタ名を指定したときはこれには蓄えられない。
vim help (:h "-)

となっています。

helpでは、1行以下となっているので、
ddで削除した場合も格納されるとおもいきや、
格納されませんでした(筆者環境の場合)

ビジュアルモードとかで、単語単位の削除で、
明示的にレジスタを指定しなかった場合に、
このレジスタに格納されます。

読み取り専用レジスタ (": ". "% )

":

一番最近に実行されたコマンドラインが、
格納されるレジスタです。

実行したいときは、コマンドラインモードで、
@ :で実行できます。

".

こちらは、最後に挿入されたテキストが、
格納されるレジスタです。

"%

カレントファイル名が、
格納されるレジスタです。

ブラックホールレジスタ("_)

消去専用レジスタのことです。

vimではddとかをしても、
事実上は、削除ではなくカットにあたり、
番号付きレジスタとかに格納されるが、
このレジスタを指定することで文字通りの削除になります。

システムクリップボードレジスタ("+)

システムのクリップボードのレジスタは+にあります。

X11ウインドウシステムには、プライマリと呼ばれるクリップボードがあるらしく、
*がそのレジスタにあたります。

windowsやmacでは、これはないので、
+も*もほとんど同じようなものといった感じかなと思います。

Vimのhelpでは、選択範囲レジスタとなっており、
難しく書かれているが、要はクリップボードの内容が、
格納されているレジスタで、環境とかOSによって、
+とか*になったりする感じと思っていただければ大丈夫です。

最終検索パターン用レジスタ ("/ )

これは割りとそのまんまで、
最後に/ とかで検索したパターンの内容が、
格納されるレジスタです。

コマンドで検索することができ、
例えばこれでhlsearchのハイライトを変えることができます。

:let @/ = "Plug"

この場合、Plugというワードでハイライトします。

まあそんなに使う機会はないかもしれませんが。

Expressionレジスタ("=)

これは、insertモードで<C-r>=を実行して、
電卓のように、計算式を入力できます。

ここまで来ると、レジスタというより電卓に近い気もします。

コマンドラインモードで、<C-r>=を実行しても、
このモードに入ることは可能です。

round(150.123)みたいに、
関数のようなものを使うことも可能です。

いやでも、いつ使うねんっていうぐらい、
使い所が難しいレジスタのような気もします。

こいつを使いこなせるようになったら、
結構なVim職人かなと思います。

よく使うレジスタ

以上、vimのレジスタについて紹介しました。
平たく言えば、レジスタとは、
複数種類のクリップボードみたいな感じですね

本来なら一つしかないクリップボードが、
たくさんあるなんて、やっぱりVimってすごいですね。

Vimのhelpでは、
代替ファイルレジスタというものもありましたが、
ニッチすぎるかつ、一生使わなくてもおかしくないので、
取りあげませんでした。

今回挙げた中でも、
一番使うのは、やはり無名レジスタで、
あとは番号付きレジスタや名前付きレジスタでしょうか。

レジスタを的確に使いこなせるようになると、
一気にVimmerとしてのレベルが上がるので、
ぜひともマスターしていただけると。

あわせて読みたい【Vim/NeoVimマクロ】作成/保存/追記/定義/格納場所など使用例も解説

本記事では、Vimのマクロについて解説します。 マクロは、Vimの機能の中でも、応用的なトピックだと思いますが、使いこなせると便利なので、本記事で作成、保存、定義、格納場所といった基本事項を解説します ...

続きを見る

  • この記事を書いた人
  • 最新記事

reisuta

Webエンジニア | 20代中盤 | 大学時代はGmailすら知らないIT音痴でプログラミングとは無縁の生活を送る → 独学でプログラミングを学ぶ → Web系受託開発企業にエンジニアとして就職 → Web系自社サービス企業に転職 | 実務未経験の頃からVimを愛好しており、仕事でもプライベートでも開発はVimとTmuxを使っているので、VSCodeに疎いのが最近の悩み。何だかんだでやっぱりRubyが好き。

おすすめ記事はこちら

Vim/Neovimプラグイン 1

プラグインをどれだけ入れるかは、その人の思想なども関係するので、一概にこれがいいというのはないかもしれません。 プラグインを全く入れない人もいれば、100個以上入れる人もいます。 ただそれでも、これだ ...

VimとNeovimの比較 2

本記事では、VimとNeovimの違いについて、解説します。 VimとNeovimの違いについては、普段頻繁にVimなどを使う方でなければ、正直、あまり気にしなくてもいいかなと思います。 ただ、Vim ...

Ruby変数やすべてがオブジェクトについて 3

本記事は、Rubyの基礎文法である、変数や真偽値、論理演算子に触れると同時に、「すべてがオブジェクト」というRubyの特徴的な思想についても解説します。 この思想は、Rubyの文法の根幹になっているの ...

4

エンジニアにおすすめの技術書 書籍学習は、エンジニアの嗜みみたいなところがありますが、 良書というものは、意外とそこまで多くもありません。 そこで本記事では「技術書マニアの筆者が厳選した技術書20選」 ...

5

エンジニアになるには? プログラミングは、専門性が高く自分一人で勉強するのが大変に感じることも多いですよね。 そこで本記事では「おすすめのプログラミングスクール5選」を特徴と、現役エンジニア目線で優れ ...

-CLIツール