✍️

WSL2でtmux/vimのクリップボードをwinと共有する設定

2022/10/08に公開

Gitリポジトリにdotfilesみたいなフォルダを作って、いろいろな環境で.tmux.confを使い回している時に、WSL2でtmuxのクリップボードを設定する方法をメモしておきます。

win32yankをパスにコピー

手軽にクリップボードのコピーと貼り付けができるコマンドラインツールをパスにコピーしておきます。
https://github.com/equalsraf/win32yank

以下でWSL2のホームフォルダをエクスプローラーで開くことができます。上記よりZIPファイルをダウンロードして、解凍してwin32yank.exeをパスの通った場所にコピーします。

# エクスプローラーでホームフォルダを開く
$ cd ~/
$ explorer.exe .

例えば、~/.bashrcに以下のようなPATH設定をしているとき、ホームのbinフォルダにwin32yank.exeをコピーします。

export PATH=$HOME/bin:/usr/local/bin:$PATH

.tmux.confに追記

続いて、~/.tmux.confにwin32yank.exeを使う設定を記述します。whichでwin32yankがあるかチェックしてからコピー&ペーストを実行します。

# --- wsl (win32yank) ---
# https://github.com/equalsraf/win32yank
if "which win32yank.exe" "bind-key -T copy-mode-vi y     send-keys -X copy-p    ipe-and-cancel 'win32yank.exe -i'"
if "which win32yank.exe" "bind-key -T copy-mode-vi Enter send-keys -X copy-p    ipe-and-cancel 'win32yank.exe -i'"
# pでペースト
if "which win32yank.exe" "bind-key p run 'tmux set-buffer -- \"$(win32yank.e    xe -o)\"; tmux paste-buffer'"

私の.tmux.confファイルには、この後、macOS用、chromebook用、Linux用と...続いていきます。

.vimrc

Neovimあたりだと自動的にできるとかなんとか。vimの場合、.vimrcに以下を記述。

if executable('win32yank.exe')
  au TextYankPost * call system('win32yank.exe -i &', @")
    function Paste(p)
      let sysclip=system('win32yank.exe -o')
        if sysclip != @"
	  let @"=sysclip
	endif
	return a:p
  endfunction
  noremap <expr> p Paste('p')
  noremap <expr> P Paste('P')
endif

Discussion