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

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-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