scramble cadenza

技術ネタのガラクタ置き場

tmux のコピーモードでのコピーがうまくいかない件

イントロ

告白すると tmux + reattach-to-user-namespace でコピーできます! って記事を見てその通りにやってみるものの、うまくいかない人でした。
ようやくこの病気を克服したので残す。

tmux 1.8 のお話。

現象

どううまくいかないかというと、長い文字列をコピーしようとすると失敗する。
確かにコピーしたはずの文字列が、何故か truncate されてしまう現象といったらいいのだろうか。
ちなみに文字列が短かったりすると、ちゃんとコピーできる。

今までは文字が切れそうなら option 押しながらドラッグしていたが、相当苦しかった。

今まで

set-option -g default-command "reattach-to-user-namespace -l zsh"

曰く、tmux 上で pbcopy/pbpaste がうまく動かないらしく、そのバグを直した wrapper が reattach-to-user-namespace である、とのこと。
そこで上記の設定を追加することで、tmux 上で pbcopy/pbpaste 使える、という話をよく聞く。

だがこれだけだとダメだった。

解決法

以下の二行を .tmux.conf に追加する。

bind -t emacs-copy M-w copy-pipe "reattach-to-user-namespace pbcopy"
bind -t emacs-copy C-w copy-pipe "reattach-to-user-namespace pbcopy"

デフォルトでは M-w の方には copy-pipe が設定されておらず、文字が切れてしまうようだ。
C-w は copy-pipe されていたが、M-w は copy-pipe されておらず、いつも M-w を使っていたので気付かなかった。

M-w でも C-w でも両方 copy-pipe するためには、両者設定を書く必要がある。
ちゃんと設定されたかどうかは、以下のコマンドで確認できる。-t は key-map のデーブルを指定するオプション。(テーブルだから t )

tmux list-keys -t emacs-copy
...
     C-w copy-pipe "reattach-to-user-namespace pbcopy"
     M-w copy-pipe "reattach-to-user-namespace pbcopy"
...

copy-pipe されていたら、設定されている証拠。