概要
よく忘れるのでここにメモメモ。。。知っているとちょっと楽できます。
vim には、様々なレジスタがありますが、その中にブラックホールレジスタと呼ばれるものがあります。
ブラックホールレジスタは "_ でアクセスできるレジスタです。名前の通り、このレジスタに登録したものは「何も保存されません」
/dev/null
みたいなものですね。
何に使うの?ってなるかもしれませんが、実はこれが結構便利なときがあったりします。
以下のようなコードがあったとして
元々、fmt.Println
の引数に指定していた値を別の変数を出力するように置き換えたいとします。
んで、この変数名が x とか i とかなら、まあいちいちコピーしなくても打ち込んでやればいいと思いますが、とっても長いとします。
なので、一旦変数名をヤンク(コピー)して、プット (貼り付け) したいって思います。
おもむろに、上記の状態 (1行目の先頭にカーソルがあるとします)から
- j
- w
- ye
として、変数名をヤンクします。
んで、次に
- j
- f(
- di)
とすると、fmt.Println
の中身を空にできるので
先程保存したやつを貼り付けてやろうと P を押すと
なんと元に戻っちゃいますw
何故かというと、vimでは d とか x とかは削除じゃなくてカットに近いです。
なので、dとかxした行為も先程ヤンクしたときと同じレジスタにデフォルトでは保存されちゃいます。
今回の件のような操作をWindowsの他のエディタのように普通に行うには、di) したときの内容を
- 別のレジスタに保存する
という行為が必要になります。
んで、別にこのデータをレジスタに大事に保存する必要もない場合は、今回のブラックホールレジスタにぶちこんでしまいます。
上述した、 di)
の部分を "_di)
とするとブラックホールレジスタにカットした内容を設定することが出来ます。
その後でPでプットすると
となります。
ちょっと、文字で伝えるとなかなかうまく伝わっていないかもしれませんが、実際に操作してみるとすぐに分かると思います。
参考情報
- history of - What is the use of the black hole register ("_)? - Vi and Vim Stack Exchange
- The Black Hole Register | by Alex R. Young | usevim | Medium
過去の記事については、以下のページからご参照下さい。
いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。