ぶていのログでぶログ

思い出したが吉日

tmuxでマルチプレフィックスのキーバインドを定義する

最近、久しぶりにtmux.confを見直しを行っていたら新機能を色々増えている!*1 ということで、色々眺めている中で特に気になったのはレイアウト機能でした。 例えばペインを分割したりしているとペイン感の高さがまちまちになって作業がしづらい…みたいなことがよく起こるのでレイアウトを適用して作業を快適にしたいというモチベーションです。 デフォルトで定義されているレイアウトは以下の5つ。

  • even-horizontal
  • even-vertical
  • main-horizontal
  • main-vertical
  • tiled

しかし、これらを切り替えるキーバイドを割り当てると5個も使うことになる…。 どうしたものかなぁ〜っとmanpageを読んでいたらなんとマルチプレフィックスなキーバイドを定義することができることを発見した! つまり Ctrl+b -> l -> h みたいなことができるようになる!

switch-client -T + bind-key -T

マルチプレフィックスなキーバイドを定義するにはswitch-client -Tとbind-key -Tを使用する。 switch-clientはセッションを変更するコマンドらしい。そして、bind-keyはキーバイドを変更するコマンドである。 これらのコマンドには -T オプションがあり、これを指定することで利用するキーテーブルを動的に変更ができるようになる。 manpageには以下のようなサンプルがある。

bind-key -Ttable2 c list-keys
bind-key -Ttable1 b switch-client -Ttable2
bind-key -Troot   a switch-client -Ttable1

この場合 prefix(デフォルトはCtrl+b) -> a -> b -> c と入力すると list-keys が実行されるという感じ。 便利だ〜〜

実際に設定した内容

これを踏まえて実際に設定したのは以下の通り。 prefix -> l -> l で even-vertical にしているのはよく使うからである。

bind l   switch-client -T layout

bind -T layout h select-layout main-horizon
bind -T layout H select-layout even-horizon
bind -T layout l select-layout even-vertical
bind -T layout t select-layout tiled
bind -T layout v select-layout main-vertical
bind -T layout V select-layout even-vertical

おわりに

tmuxがバージョンアップで便利になっていて、色々やれることを改めて認識した。 今回、紹介していないがhook機能も追加されていて、例えばクリップボード操作された時に何かを実行するみたいなこともできそうだった。 choose-tree とか choose-buffer とかも便利そうなので定期的に見直ししていきたい。

*1:最後にtmuxのChangelogを眺めたのが2.4だった記憶。ブログ執筆時点の最新は2.9a。手元のUbuntu 19.04では2.8だった