Posted at

tmux2.4からvi-copyがcopy-modeに変わっていた

More than 1 year has passed since last update.

tmuxの設定を見直し中で本家のマニュアルを定期的に見ているのですが、最新版のv2.5がリリースされています。

https://tmux.github.io/

以前に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を確認

https://raw.githubusercontent.com/tmux/tmux/2.5/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-up

Becomes:

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-copycopy-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-copycopy-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を設定しなくとも、

クリップボードの連携ができるようになっていました。

そのあたりについては、幾つかのコメントが見受けられました。

結論からいうと、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