dackdive's blog

新米webエンジニアによる技術ブログ。JavaScript(React), Salesforce, Python など

[tmux][iTerm]ショートカットキーでタブ(ウィンドウ)切り替え

職場のPCもプライベートのPCもmacなんですが、
ターミナル環境としてiTerm2とtmuxを使ってます。

一般的にそうなのかわかりませんが、
Cmd+tでiTermにより新規タブを作成した時
タブ同士がなぜか同じウィンドウを指しているようで、
タブで複数の環境を立ち上げておくことができませんでした。

一方、tmuxにはウィンドウという概念があって
new-windowコマンドとかで複数の環境を立ち上げておくことができますよね。
(普段の使い方として、sshとかで別のPCに接続するわけじゃないんですが
ローカルPCの複数のディレクトリで作業したい時とかに使ってます)

f:id:dackdive:20140808061456p:plain

ただ、元々デフォルトのターミナルでタブ移動をCmd+Shift+[またはCmd+Shift+]ショートカットで行っていたので
これでtmuxのウィンドウ間移動もできないかな...と思ったのです。

で、調べてみるとこちらの記事に書いてました。

https://codeiq.jp/magazine/2014/01/5143/

以下、その設定方法です。

環境

Mac OS 10.9(Mavericks)
iTerm2
tmux

設定

iTermの設定画面を開き、

Keys > GlobalShortcut Keys

の下にある+ボタンをクリックします。

f:id:dackdive:20140808114708p:plain

続いて、表示される画面で

Keyboard Shorcut: 割り当てたいショートカットキー(ここではCmd+Shift+[
Action: 「Send Hex Code」を選択

を設定し、一番下のテキストボックスにHex codeを入力します。
Hex codeとはtmuxのショートカットコマンドを16進数で表現したものです。

f:id:dackdive:20140808120817p:plain

ここで、tmuxのプリフィックスキーがデフォルトのCtrl+bのままの場合は
Hex codeも参考元の記事の通りでいいのですが、
.tmux.confなどでプリフィックスキーを変更している場合は
このサイトを参考に、対応するHex codeを参照してください。

私の環境ではtmuxのプリフィックスキーをCtrl+tに割り当てているため、Hex codeは0x14でした。

あとは、通常ウィンドウ間の移動はCtrl+t nおよびCtrl+t pで行っているため
対応するHex codeを表にまとめると、次のようになりました。

Keyboard Shortcut Hex Code 動作 tmuxのKeyboard Shortcut tmuxのコマンド
Cmd+Shift+[ 0x14 0x70 前のウィンドウに移動 Ctrl+t p previous-window
Cmd+Shift+] 0x14 0x6e 次のウィンドウに移動 Ctrl+t n next-window

設定完了後の画面はこんな感じ。

f:id:dackdive:20140808061449p:plain

設定はこれでおしまい。

※※2014/08/08 追記※※

ウィンドウの移動だけでなく、新規作成や閉じるのも通常のタブと同じようなショートカットキーで実現したいと思い、追加しました。
Cmd+tで新規ウィンドウ、Cmd+wでウィンドウを閉じるためのショートカットはこちらです。

Keyboard Shortcut Hex Code 動作 tmuxのKeyboard Shortcut tmuxのコマンド
Cmd+t 0x14 0x63 新規ウィンドウ Ctrl+t c new-window
Cmd+w 0x14 0x6b ウィンドウを閉じる Ctrl+t k kill-window
(または) 0x04 デタッチ Ctrl+d detach

※ウィンドウを閉じるためのtmuxのショートカットはデフォルトでは設定されてません。
次のように.tmux.confに記述する必要があります。

# kill K k
unbind K
bind K kill-window
unbind k
bind k kill-window

# detach ^D d
unbind ^D
bind ^D detach

Cmd+wkill-windowdetachのどちらに割り当てるかは
好みで大丈夫だと思います。
(意味的にはkill-window...?)

おわりに

この設定だけで、Cmd+Shift+[, Cmd+Shift+]によるウィンドウの移動が可能になりました。
iTermのタブ移動とショートカットキーがかぶっているため大丈夫かなーと思ったんですが、問題なさそうです。

リファレンス

基本的にここ https://codeiq.jp/magazine/2014/01/5143/

Ctrl-○とHex codeの対応 unix-manuals.com - このウェブサイトは販売用です! - unix manuals リソースおよび情報

読めたら読みたい Google Code Archive - Long-term storage for Google Code Project Hosting.