個人的 には、一般的にtmuxで使う98%くらいの操作は以下のような機能だと思っている。(※ 98%は完全に主観的な数値であり客観的データに基づいているわけではないことをご了承ください)
- ウィンドウの新規作成 (ウィンドウ = タブみたいなやつ)
- ウィンドウの削除
- ウィンドウの切り替え
- ウィンドウの位置の入れ替え
- ウィンドウの分割[水平/垂直] (ウィンドウを分割してできたエリアをpaneという)
- paneのフォーカス移動
- コピーモードへの切り替え (主にコピーするためではなく上にスクロールするため)
これらの操作にいちいちプレフィックスキー(デフォルト C-b
)を打つのはめんどくさい。特に2つ隣のウィンドウに移動するときなど連続でキーを入力するときがめんどくさい。1
そこでプレフィックスを入力しなくてよいキーバインドとなる bind -n
と修飾キー、直感的にわかりやすい矢印キーを使って効率化する。2
私の日々のtmuxの使用方法
私はtmuxの機能の中でもウィンドウの切り替えが圧倒的に使用頻度が多くて、次にウィンドウの作成・削除、コピーモードへの切り替えが多い。paneの分割はvimの分割と併用していることが多いので、シェルを一時的に同じ画面で開きたいときに使うくらいな感じで日々使用している。
私が使用している98%の残りの2%(要はプレフィックスを打ってから使っている機能)はなにかというと、セッションのデタッチ、ウィンドウ<->paneの切り替え、ウィンドウ名の名前変更、paneのサイズ変更などだと思う。
修飾キーをターミナルで使う上での注意点
修飾キーはターミナルのショートカットに割り当てられていることもあるので、ターミナルのショートカットはオフにしておいたほうがいい(どうせ対して使うことはないため)。
またターミナルによっては修飾キー+矢印キーがうまく入力できないこともある。そういうときは Ctrl-v
を入力したあと Alt-上矢印キー
などを入力して正しいキーシーケンスになっているか確認する必要がある。
(使っているターミナルがalacrittyの場合は ~/.config/alacritty/alacritty.yml
の key_bindings:
にある)
ちなみに私の環境では
- Alt-上矢印キー:
^[[1;3A
- Alt-下矢印キー:
^[[1;3B
- Alt-右矢印キー:
^[[1;3C
- Alt-左矢印キー:
^[[1;3D
- Ctrl-上矢印キー:
^[[1;5A
となっていた。dotfilesのここの部分
(※ 普通Ctrl-左右矢印キーは単語移動に割当られているので、使っている場合は設定しないほうがいい)
設定
私はtmuxの主な修飾キーはAltを選択しているのでここではAltを用いた設定を書く。サブとしてShiftとCtrlも使っているが、エディタなどとコンフリクトすることが多いので矢印キーなど限定的に使うのが好ましいと思われる。
# Alt-上矢印キーでウィンドウの新規作成
bind -n M-up new-window -c "#{pane_current_path}"
# Alt-下矢印キーでウィンドウの削除
bind -n M-down confirm-before 'kill-window'
# Alt-右左矢印キーでウィンドウの切り替え
bind -n M-left previous-window
bind -n M-right next-window
# ウィンドウの位置の入れ替え
bind-key -n M-S-left swap-window -t -1
bind-key -n M-S-right swap-window -t +1
# Alt-- でウィンドウの分割[水平]
bind -n M-- split-window -vc "#{pane_current_path}"
# Alt-\ でウィンドウの分割[垂直]
# ( | で垂直分割としたいが|は入力にShiftが必要なため省略)
bind -n 'M-\' split-window -hc "#{pane_current_path}"
# paneのフォーカス移動 (よく使う動作のため、Shift-矢印キーを使う)
bind -n S-left select-pane -L
bind -n S-down select-pane -D
bind -n S-up select-pane -U
bind -n S-right select-pane -R
思われる
# コピーモードへの切り替え (Ctrl-上矢印キー)
bind -n C-up copy-mode
これでtmuxのよく使う動作をプレフィックスなしで実行できるようになった
他にもよく使う動作があれば修飾キーを用いて入力を高速化し、生産性を向上させるといいと思う