Skip to content
blog.kenichikat.me
Go back

tmuxでmacOSのクリップボードと連携するコピペ設定

tmuxを使っているとよく困るのが「コピーモードでコピーした内容が、tmux内でしかペーストできない」問題。デフォルトのままだと prefix + [ でコピーモードに入り、範囲選択してコピーしても、その内容はtmux独自のバッファに入るだけで、macOSのクリップボード(pbcopy/pbpaste)とは連携しない。結果、他のアプリに貼り付けたいときに困る。

.tmux.conf に入れているコピペ関連の設定をメモしておく。

全体設定

# Option
setw -g mode-keys vi

## Bindings
set -g mouse on
set -g set-clipboard on

# copy mode
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "pbcopy"
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "pbcopy"
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pbcopy"

bind-key y copy-mode
bind-key p paste-buffer

各設定の解説

setw -g mode-keys vi

コピーモード内のキー操作をvi風にする設定。h/j/k/l でカーソル移動、v で範囲選択開始、y でヤンクといった、vimに慣れた人には馴染み深い操作感になる。デフォルトはemacs風のmode-keys emacsだが、vi操作に慣れているとこちらの方が使いやすい。

set -g mouse on

マウス操作を有効にする設定。マウスでペインを選択したり、ドラッグでコピーモードに入って範囲選択したりできるようになる。地味だが、マウスドラッグで直感的に選択できるのは便利。

set -g set-clipboard on

tmuxがシステムクリップボードとやり取りするためのオプション。tmuxが対応している端末(iTerm2やTerminal.appなど)であれば、OSC 52エスケープシーケンスを使ってクリップボードとの連携を試みる。ただし、これだけでは環境によって動作が不安定なことがあるため、下記のcopy-pipe-and-cancelと組み合わせるのが確実。

copy-mode-viでの明示的なpbcopy連携

ここが今回の設定の肝。

bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "pbcopy"
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "pbcopy"
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pbcopy"

bind-key y copy-mode / bind-key p paste-buffer

まとめ

tmuxでmacOSと違和感なくコピペするには、以下の3点がポイント。

  1. set -g mouse onsetw -g mode-keys vi で操作感を整える
  2. set -g set-clipboard on でtmux自体のクリップボード連携を有効化する
  3. copy-mode-vi の主要な確定操作(Enter/y/マウスドラッグ終了)すべてに copy-pipe-and-cancel "pbcopy" を割り当て、確実にクリップボードへ送る

この3つを組み合わせることで、tmux内でコピーした内容をそのまま他のアプリにペーストできるようになり、ストレスがかなり減る。


Share this post on:

Next Post
asdf環境でpnpmのグローバルインストール先を分離する