gyでVimからクリップボードにヤンクする

by
カテゴリ:

Vim 駅伝の2024/3/11の記事です。

Vim/Neovimで文字列をクリップボードへヤンクする主な方法は大きく二通りあります。

詳しくは以下の記事をご参照ください。

Hack #126: クリップボードを利用する

自動同期は一見便利そうですが、Vim内の文字列をVim外へ貼りつけたいケースはヤンクする頻度からするとごく僅かです。
また、'clipboard'オプションは、削除(dx)や編集(cs)などを実行した時もクリップボードを上書きするため、やりすぎ感があります。
Vimから消した文字列を別所に貼りつけたいことってありますか……?
クリップボードの履歴を使う人は、履歴汚染も気になるでしょう。

一方で都度指定するには"+がそこそこ入力しにくい問題があります。

そこで、atusyは以下のように、gyをGUI-yankくらいのつもりで、クリップボードにヤンクするためのマッピングに割り当てています。
たとえばgyiWすると、非空白文字列の連続する範囲をクリップボードにヤンクできるわけです。

noremap gy "+y

gから始まるマッピングは大部分がデフォルト定義を持ちますが、偶然にもgyは空いているので、遠慮なく使えますね。

もし、どうしても自動化したいが、削除や編集ではクリップボードを上書きしてほしくない場合は、以下の記事を参考にしてみてください。
TextYankPostイベントではレジスタを変更した操作の種別を検出できるので、ヤンク(y)によって無名レジスタが変更された場合に、その内容をクリップボードに同期するといった設定も可能なはずです(未検証)。
これなら'clipboard'オプションも不要ですね。

Vimで無名レジスタでchange/delete/yankした時に、イニシャルに相当するレジスタにも値を入れる

ENJOY