いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

vimのブラックホールレジスタ ("_) について (何も残らないレジスタ)

f:id:gsf_zero1:20211217140202g:plain

概要

よく忘れるのでここにメモメモ。。。知っているとちょっと楽できます。

vim には、様々なレジスタがありますが、その中にブラックホールレジスタと呼ばれるものがあります。

vi.stackexchange.com

ブラックホールレジスタは "_ でアクセスできるレジスタです。名前の通り、このレジスタに登録したものは「何も保存されません」

/dev/null みたいなものですね。

何に使うの?ってなるかもしれませんが、実はこれが結構便利なときがあったりします。

以下のようなコードがあったとして

f:id:gsf_zero1:20220301111954p:plain

元々、fmt.Println の引数に指定していた値を別の変数を出力するように置き換えたいとします。

んで、この変数名が x とか i とかなら、まあいちいちコピーしなくても打ち込んでやればいいと思いますが、とっても長いとします。

なので、一旦変数名をヤンク(コピー)して、プット (貼り付け) したいって思います。

おもむろに、上記の状態 (1行目の先頭にカーソルがあるとします)から

  • j
  • w
  • ye

として、変数名をヤンクします。

んで、次に

  • j
  • f(
  • di)

とすると、fmt.Println の中身を空にできるので

f:id:gsf_zero1:20220301112506p:plain

先程保存したやつを貼り付けてやろうと P を押すと

f:id:gsf_zero1:20220301112552p:plain

なんと元に戻っちゃいますw

何故かというと、vimでは d とか x とかは削除じゃなくてカットに近いです。

なので、dとかxした行為も先程ヤンクしたときと同じレジスタにデフォルトでは保存されちゃいます。

今回の件のような操作をWindowsの他のエディタのように普通に行うには、di) したときの内容を

  • 別のレジスタに保存する

という行為が必要になります。

んで、別にこのデータをレジスタに大事に保存する必要もない場合は、今回のブラックホールレジスタにぶちこんでしまいます。

上述した、 di) の部分を "_di) とするとブラックホールレジスタにカットした内容を設定することが出来ます。

その後でPでプットすると

f:id:gsf_zero1:20220301113215p:plain

となります。

ちょっと、文字で伝えるとなかなかうまく伝わっていないかもしれませんが、実際に操作してみるとすぐに分かると思います。

参考情報


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。