NoahOrblog

某・福島にある大学のコンピュータ理工学部の大学生のお話。

Vimのレジスタをうまくつかいたい話

Noahです。この記事はVim Advent Calendar 15日目の記事です

qiita.com

レジスタをうまく使いたい

日頃Vimを触ってるとき、ぼくは何も考えずにヤンクや削除をしていますが、他のレジスタも有効活用したい.

ただ、"ay とかを打つのはしんどい

打ちやすいようにマッピングしても、結局レジスタを指定する際に [a-z] みたいに打たねばいけないので面倒だったりする

そして多分僕はレジスタを使う頃には中身を覚えていないので :reg などで確認する羽目になる. そのため、名前付きバッファの場合は各バッファに意味を持たせないといけなさそう

レジスタについて

レジスタとは、テキストを保持できるスペースのことで、ヤンクや削除をしたテキストを入れたりしてペーストできるようになっています.

普段ヤンクや削除をする際、なにも設定していなければ無名レジスタに入り、ペーストする際にはそこから利用されます.

レジスタには種類があり、

1. 無名レジスタ ""
2. 10個の番号付きレジスタ "0 から "9
3. 小削除用レジスタ "-
4. 26個の名前付きレジスタ "a から "z または "A から "Z
5. 3個の読み取り専用レジスタ ": と ". と "%
6. 代替バッファ用レジスタ "#
7. expression 用レジスタ "=
8. 選択領域用レジスタ "* と "+ と "~ 
9. 消去専用レジスタ "_
10. 最終検索パターン用レジスタ "/

ref. https://vim-jp.org/vimdoc-ja/change.html#registers

なるほど、たくさんある。

有効活用できるようにしてみる

個人的に思った問題は、

  1. 手軽にレジスタの中身を確認したい
  2. "ap など、レジスタを指定するのに面倒なタイプをしたくない
  3. ヤンクして保存してある内容のFuzzy searchをしたい

を満たす下のようなプラグインを書いてみました

github.com

個人的にfzfが好きなので、fzfありきのコードになっている

上のプレビューでは、README.mdの各見出しをヤンクしてそれぞれ管理しているレジスタの中に入れている (ここでは、"b, "c, "f, "h)

レジスタを複数予め指定しておけば、ヤンクする際に、よしなにレジスタに割り振ってくれるが、ペーストする際にはfzfで検索をかけるのでどこのレジスタに保存したのかを心配しなくていいのがいいところ

総論

個人的に思う、Vimレジスタの有効活用でした。

みなさんどのようにレジスタを有効活用しているのかぜひ教えて下さい。