✍️
WSL2でtmux/vimのクリップボードをwinと共有する設定
Gitリポジトリにdotfilesみたいなフォルダを作って、いろいろな環境で.tmux.confを使い回している時に、WSL2でtmuxのクリップボードを設定する方法をメモしておきます。
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