読者です 読者をやめる 読者になる 読者になる

ソフトウェアとハードウェアの境界

ホビー開発に関する誰得情報満載☆

vim ヤンクとクリップボードまわり

意図しない文字列がレジスタへ格納される

vimでコピペの作業をする場合、どの操作をしたら、どの文字列がレジスタに格納され、クリップボードに格納されて、というのがわからなくなる時がある。
特に矩形選択時の置換書き換え、置換貼り付けなどしたあと、次に貼り付けしたいところでペーストすると「あれ?」ってなることが、僕は度々あった。
それを解決したい。

今回の.vimrcの仕様

以下を今回の.vimrcの仕様としよう。

  • ヤンク時は、基本的にクリップボードを使用する。
  • ビジュアルモードでの置換書き換え=c(貼り付け=p)をする場合、書き換え(貼り付け)時に削除される文字列をクリップボードに格納しない。
.vimrc クリップボードと置換書き換え(貼り付け)
" クリップボードに無名+レジスタを使用
set clipboard=unnamedplus

" ビジュアルモード時の置換貼り付け
vnoremap <silent> p     ""d"+P
" ビジュアルモード時の置換書き換え
vnoremap <silent> c     ""c

" 以下の設定はお好みで。
inoremap <silent> <C-v> <C-r>+
inoremap <silent> <C-p> <C-r>+

とりあえずこれで置換書き換えとかでクリップボードを汚されずにすむ。
「""d"+P」は苦肉の策と言える。
「""c」みたいにシンプルにシンプルに書く方法はないのだろうか?
ちなみに、僕の環境はLinuxBean14.04上でvimを利用しているので、clipboard=unnamedplusとしている。
WindowsMacOSX環境の方はclipboard=unnamedでもいいかも。
その場合、置換貼り付けの「""d"+P」は「"ad"+P」とかにして、違うレジスタを使用しなければならない。