WindowsでVSCodeを動かし、VSCodeの統合ターミナルでWSLのUbuntuのシェルを動かし、そこでtmuxを使っているということでいいですよね。
Ubuntu側のtmuxでコピーした内容をWindowsのクリップボードにもコピーするには、Ubuntu側で動作するxsel
というコマンドを使います。あなたのUbuntuにインストールされていなければ、
でインストールしてください。このxsel
コマンドを-bi
オプション付きで実行すると、標準入力の内容をUbuntu側のクリップボードにコピーします。
次に、tmuxの設定ファイル~/.tmux.conf
に以下のような内容を設定します。
bind-key -T copy-mode-vi Enter send -X copy-pipe-and-cancel "xsel -bi"
bind-key -T copy-mode C-w send -X copy-pipe-and-cancel "xsel -bi"
コピーモードのキー操作をvi風にしているならcopy-mode-vi
を含むほう、標準の(Emacs風)キー操作のままならcopy-mode
を含むほうが使われます(使う方の行だけ書いてもOK)。また、コピーを完了するキー操作のEnter
やC-w
(Ctrl-Wキー)はお好みで変更して構いません。
設定ファイルを変更後は、使用中のtmuxをすべて終了してから再度tmuxを起動してください。実行中のtmuxが残っている状態では、設定ファイルの変更が有効になりません。
その後、tmuxをコピーモードにして、さきほど設定したコピーを完了するキー操作を行なうと、send -X copy-pipe-and-cancel "xsel -bi"
が実行されて、tmuxでコピーした内容がパイプ経由でxsel
コマンドに送られ、Ubuntu側のクリップボードにコピーされます。すると、WSLの機能により(文字エンコーディングが適切に変換された上で)Windows側のクリップボードにもコピーされます。
Ubuntu 22.04にアップグレードした場合
WSLのUbuntuを22.04にアップグレード(あるいは新規にインストール)した場合は、tmuxのバージョンが3.2aに上がります。バージョン3.2以降では、設定がより容易になっていおり、tmuxの設定ファイル~/.tmux.conf
に以下の内容を設定するだけです。
set -s copy-command 'xsel -bi'
これだけで、コピーモードでのコピーを完了するキー操作のすべてで、コピーした内容がパイプ経由でxset -bi
に送られるようになります。つまり、古いtmuxで設定していたbind-key ...
の設定は不要になるので、コメント化(あるいは削除)してください。
余談
実は、Windowsにもclip.exe
という「標準入力をWindowsのクリップボードにコピーする」コマンドが標準で用意されています。通常のWindowsでは、C:\Windows\System32
フォルダーにあるはずです。
現在のWSLなら、Windows用のツールをそのままUbuntuのシェルから実行できるので、わざわざxsel
コマンドをインストールしなくても、clip.exe
を使えば代わりになりそうですよね。実際にやってみると、英数字はコピーできていますが、日本語が文字化けしてしまいます。
原因は、UTF-8エンコードの文字列がパイプ経由でそのままclip.exe
に渡されるためです。実際に、clip.exe
の手前にnkf
を噛まして、UTF-8からBOMなしUTF-16(リトルエンディアン)に変換するようにすれば文字化けは解消します。もっとも、これはWSLがクリップボードに関してやっていることと同じなので、今回はxsel
でUbuntu側のクリップボードにコピーし、文字エンコーディングの変換はWSLに任せています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。