Vim駅伝2025-08-08の記事です。前回の記事はmitsu-yukiさんによる「いつの間にかVimでも外部プラグインなしでもEditorConfigが使えるようになっていた」でした。
カーソル下の単語を編集(ciw
)とかすると、p
で貼り付ける内容が更新されます。便利なシーンもあるのですが、直前にヤンクしておいた内容を残したい時などに困りますよね。
原因はy
もc
もd
も無名レジスタにp
する内容を保存しているため、上書き合戦が起きてしまうからです。レジスタについてはゴリラさんのVim講座を参考にしていただくとして、愚直に上書き対策をするなら"_ciw"
としてブラックホールレジスタを指定します。ただ、"_
はお世事にも入力しやすいキーではありません。
挿入、ビジュアルモードについて学ぼう 〜 Vimはいいぞ!ゴリラと学ぶVim講座(3)
https://knowledge.sakura.ad.jp/22465/
こんな時は以下のように、-
をブラックホールレジスタにマッピングしておくと便利です。
-ciw
なら入力しやすいですよね。
nnoremap - "_
xnoremap - "_
元々の-
は、カーソルを1行上の最初の非空白文字まで移動するコマンドです。
lines upward, on the first non-blank character |linewise|.
https://neovim.io/doc/user/motion.html#-
kkk-
みたいにとっさに-
を出せる玄人でもなければ、まず潰して差し支えないでしょう。
k^
でも同じことができます。
余談 1: 無名レジスタの上書きを気にしない方法
無名レジスタの不意な上書きを防ぐ方法として、ブラックホールレジスタを使う代わりに、無名レジスタと同じ内容を名前付きレジスタにコピーしておく方法もあります。
Vimで無名レジスタでchange/delete/yankした時に、イニシャルに相当するレジスタにも値を入れる
https://blog.atusy.net/2023/12/17/vim-easy-to-remember-regnames/
私はもっぱらこれを利用しているため、-
のマッピングは存在しているだけになっています。
余談 2: クリップボードへのコピーを楽にする方法
編集中の内容をVimの外にもっていきたいときは、"+
によるセレクションレジスタを使います。内容がOSのクリップボードにコピーされます。
しかし、ブラックホールレジスタと同様に押しにくいマッピングです。
このユースケースではc
やd
による編集や削除ではなくy
によるヤンクが多いので、gy
あたりを"+y
にマッピングしておくと便利です。
Vimで無名レジスタでchange/delete/yankした時に、イニシャルに相当するレジスタにも値を入れる
https://blog.atusy.net/2024/03/11/vim-gy-as-gui-yank/
汎用性と対称性を優先して本記事と同様の手段をとるのであれば、+
をセレクションレジスタにマッピングすると、"
の入力がなくなるので少し便利です。
nnoremap + "+
xnoremap + "+
ENJOY!
この記事はvim-jp slackでの質問がきっかけで書きました。自分があたりまえに思ってることがそうじゃなかったりするのは、コミュニケーションの中からしか気付けない学びですね。
エンジニアの楽園だなんて呼ばれることもあるvim-jp、EmacsやVSCodeのユーザーもいますので、気軽に覗いてみてください。
エンジニアの楽園 vim-jp
https://blog.tomoya.dev/posts/vim-jp-is-a-paradise-for-engineers/
同名を関したラジオもあり、こちらからはvim-jpを知らない人も楽しめるコンテンツを通じて、vim-jpというコミュニティの空気感を味わっていただけます。
エンジニアの楽園 Vim-jp ラジオ
https://vim-jp-radio.com/