普段、ターミナルは iTerm2 と tmux を使っている。
また、iTerm2 の Global Shortcut Keys というショートカットキーの設定で以下のように設定することにより、
tmux におけるウィンドウをターミナルのタブのように操作できるようにしている。
(Cmd+t
, Cmd+w
で新規ウィンドウ、ウィンドウを閉じる、Cmd+Shift+{
(or }
) でウィンドウ間移動)
Keyboard Shortcut | Hex Code | 動作 | tmuxにおける コマンド |
tmuxにおける Keyboard Shortcut |
---|---|---|---|---|
Cmd+Shift+[ | 0x14 0x70 | 前のウィンドウに 移動 |
Ctrl+t p | previous-window |
Cmd+Shift+] | 0x14 0x6e | 次のウィンドウに 移動 |
Ctrl+t n | next-window |
Cmd+t | 0x14 0x63 | 新規ウィンドウ | Ctrl+t c | new-window |
Cmd+w | 0x14 0x6b | ウィンドウを閉じる | Ctrl+t k | kill-window |
注1)prefix キーをデフォルトの Ctrl+b
から Ctrl+t
に変えているため、 hex code では 0x14
になっている
注2)ウィンドウを閉じるためのtmuxのショートカットはデフォルトでは設定されていないので、
.tmux.conf
に記述する必要がある
詳細は
ところが最近 Mac の環境構築を一からやり直していたところ、このコマンドが動かなくなっていた。
現象としては、Cmd+t
を押すと c
が、Cmd+w
を押すと k
が入力され、そのまま tmux のコマンド受け付け状態になる。
必死でググってみると、1週間ぐらい前に同じことを言ってる人がいた。
で、結論としては以下の1行を .tmux.conf
に追記すれば良い。
set -g assume-paste-time 0
assume-paste-time
は初めて聞いたオプションだったのでちょっと調べてみたけど
http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1
assume-paste-time milliseconds
If keys are entered faster than one in milliseconds, they are assumed to have been pasted rather than typed and tmux key bindings are not processed. The default is one millisecond and zero disables.
1ms 以内で入力されたものは文字のペーストとみなし、key binding は実行されないということか。
ただ、上記 Issue の登録者の最後のコメントによると
2.0 → 2.1 にかけてこのオプションのデフォルト値が変わった形跡はないらしい。
とするとなんだったのか。
...とりあえず元どおり動くようになったので、これ以上調査するのはやめておく。
焦ったー