質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%

Q&A

解決済

1回答

1412閲覧

VsCodeのtmuxのコピーをwindowsのクリップボードと共有する方法について

EzrealTrueshot

総合スコア388

0グッド

0クリップ

投稿2023/01/31 20:57

実現したいこと

VsCodeでtmuxを用いてコピーしたものをwindowsのクリップボードと共有する方法についてご教示頂きたいです。

(現在、VsCodeの拡張パック(extension)は何もいれていません。解決のために入れることも可能です。)

発生している問題・エラーメッセージ

tmuxでコピーした結果がwindowsのクリップボードと共有されません。
(tmux内ではtmuxバッファーを用いて、コピー&ペーストがきちんと出来ています。)

試したこと

調べたところ、macの場合は~のような形でと、macの記事ばかりでwindowsの記事が1つも見当たりません。
https://medium.com/@bramblexu/enable-tmux-copy-paste-in-vs-code-terminal-for-mac-408a5cf94cd9

windowsではtmuxでコピーした内容をクリップボードへと共有することが不可能なのでしょうか?

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。
Windows11
VsCode 1.74.3
VsCodeのターミナル:wsl(ubuntu20.04)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

WindowsでVSCodeを動かし、VSCodeの統合ターミナルでWSLのUbuntuのシェルを動かし、そこでtmuxを使っているということでいいですよね。

Ubuntu側のtmuxでコピーした内容をWindowsのクリップボードにもコピーするには、Ubuntu側で動作するxselというコマンドを使います。あなたのUbuntuにインストールされていなければ、

$ sudo apt install xsel

でインストールしてください。この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)。また、コピーを完了するキー操作のEnterC-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に任せています。

投稿2023/03/14 08:44

編集2023/03/15 03:06
Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問