🎉

Vim が Wayland のクリップボードをサポート

に公開

Wayland のクリップボード

Vim では、2025年6月27日更新の v9.1.1485 で、Wayland のクリップボードのサポートが入りました。

最新の Vim をビルドすると+wayland+wayland_clipboardが有効になっていると思います。:versionで確認してみてください。
Wayland への接続を無効化したい場合は-Yオプションを付けて Vim を起動する必要があります。Wayland への接続を再度初期化するコマンド:wl[restore]も追加されています。

今までは、Wayland のクリップボードと Vim のレジスタを双方向で連携する[1]には以下のような設定が必要でした。[2]
この他にもヤンクが絡むコマンドなどがある度にsetregを呼ぶ必要がありました。

nnoremap <silent> p      <Cmd>call setreg('"', system('wl-paste -n'))<CR>""p
nnoremap <silent> P      <Cmd>call setreg('"', system('wl-paste -n'))<CR>""P
xnoremap <silent> p      <Cmd>call setreg('"', system('wl-paste -n'))<CR>""P
xnoremap <silent> P      <Cmd>call setreg('"', system('wl-paste -n'))<CR>""p
inoremap          <C-R>" <Cmd>call setreg('"', system('wl-paste -n'))<CR><C-R>"

set clipboard^=unnamed

augroup WaylandClipboard
  autocmd!
  autocmd TextYankPost * silent call job_start(['wl-copy', '--', getreg('*')])
augroup END

これからは、上記のケースでは次の1行で済むようになります。

set clipboard^=unnamedplus

関連するオプションなど

X11 と Wayland の両方が有効な時の優先順位

'clipmethod'オプションでどちらを優先するか指定することができます。デフォルトでは"wayland,x11"となっており、Wayland が優先されます。
現在指定されているメソッドはv:clipmethodで確認できます。

Wayland seat の設定

もし、Wayland の同一セッション内で複数の seat を使用している場合は、新たに導入された'wlseat'で seat を指定できます。

その他

GNOME では Wayland のクリップボードにアクセスする為にフォーカスを奪う必要があります。その際に使用する'wlsteal'オプションが追加されました。
更に、Wayland への接続や'wlsteal'が有効な時にフォーカスを奪う際のタイムアウト時間を指定する'wltimeoutlen'オプションが追加されました。

おわり

Wayland に関する、最近追加された機能についてまとめてみました。
最新の情報については:help wayland.txtをご参照ください。
以上です! ウェーイ!


脚注
  1. ここでは clipboard^=unnamedplus 相当のことをさせています。 ↩︎

  2. Neovim であればg:clipboardがあるので、このようなワークアラウンドは元々不要です。 ↩︎

GitHubで編集を提案

Discussion