tmuxの設定を見直し中で本家のマニュアルを定期的に見ているのですが、最新版のv2.5
がリリースされています。
以前にtmuxをv2.1
にアップデートした時、マウス設定の挙動が変わったことがあったのでしばらく様子見をしていたのですが、
マニュアル自体もv2.5
となっているのもあり、思い切ってv2.5
にアップデートしてみたところ、tmuxでのcopy-mode設定が変わっていました。
現状のターミナル環境
- macOS Sierra
- iTerm2 3.1
- tmux 2.3.1
tmuxをv2.5にアップデート
macos環境なのでHomebrewでアップデート。
brew update
brew upgrade tmux
$ tmux -V
tmux 2.5
起動時にinvalid or unknown commandが出る
私の環境だと、こんなエラーが゚。。。
/Users/jyotti/.tmux.conf:37: invalid or unknown command: bind-key -t vi-copy v begin-selection /Users/jyotti/.tmux.conf:38: invalid or unknown command: bind-key -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"
/Users/jyotti/.tmux.conf:41: invalid or unknown command: unbind -t vi-copy Enter
/Users/jyotti/.tmux.conf:42: invalid or unknown command: bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"
.tmux.confの該当箇所
36 # Setup 'v' to begin selection as in Vim
37 bind-key -t vi-copy v begin-selection
38 bind-key -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"
39
40 # Update default binding of `Enter` to also use copy-pipe
41 unbind -t vi-copy Enter
42 bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"
vi-copy
関連がinvalidらしい。。。
tmuxのCHANGESを確認
The emacs-copy and vi-copy tables have been replaced by the copy-mode and
copy-mode-vi tables. Commands are sent using the -X and -N flags to
send-keys. So the following:bind -temacs-copy C-Up scroll-up
bind -temacs-copy -R5 WheelUpPane scroll-upBecomes:
bind -Tcopy-mode C-Up send -X scroll-up
bind -Tcopy-mode WheelUpPane send -N5 -X scroll-up
tmuxでコピーモードの操作をvi風味にするためvi-copy
でキーバインドを変更しているのですが、
v2.4
からvi-copy
はcopy-mode
に置き換わった模様。
tmux.conf のcopy-mode対応
自分はvi操作を好むので、tmux2.4でも同じ振る舞いとなるような設定に調整します。
-
v
tmuxでのselectionモード開始 -
y
copyしてselectionモードを終了 -
Enter
y
と同じ動作 -
reattach-to-user-namespace
でmacosとのクリップボード連携
.tmux.conf の変更
set-option -g default-command "exec reattach-to-user-namespace -l $SHELL"
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"
-
vi-copy
はcopy-mode-vi
に置き換え-
copy-mode
はemacs向け
-
-
copy-pipe-and-cancel
でcopyの内容をreattach-to-user-namespace
へ渡す-
copy-pipe
はselectionモードを維持したままになる
-
これで今までと同じ操作ができるようになった:-)
reattach-to-user-namespaceについて
reattach-to-user-namespace
はtmuxをmacosで使っている場合の鉄板みたいなもので、
tmux <-> macos間でクリップボード連携するための必須設定みたいな位置づけになっています。
tmux.confを調整していて気づいたんですが、reattach-to-user-namespace
を設定しなくとも、
クリップボードの連携ができるようになっていました。
そのあたりについては、幾つかのコメントが見受けられました。
- https://github.com/tmux/tmux/issues/543
- https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard/issues/42
- https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard/issues/53
結論からいうと、tmux上で起動させたvimではreattach-to-user-namespace
を連携させていないとクリップボード連携ができなかったです。
vimの設定でset clipboard=unnamed
を入れると良いみたいなコメントもありましたが、面倒だったのでそこまでは試してません。
vim以外にもクリップボード連携ができないケースがあるかもなので、そのままreattach-to-user-namespace
は使っていこうと思います。
tmux2.5はどうなっている?
自分のtmux.confでは、今のところvi-copy
みたいな破壊的影響はでていないようです。
気づいた点があれば、気が向けばまた投稿するかも。
参考
下書き状態で気づいたんですが、既に同じケースについての対処方法が投稿されていました。
こちらに書いていない説明もあるので、参考までに。
http://qiita.com/KanchiShimono/items/d3904c0dc4acf40b6705