tmux のセッション切り替えを fzf 経由でやる

公開:2020/10/07
更新:2020/10/07
1 min読了の目安(約1600字IDEAアイデア記事

普段の作業はターミナルから vim や git をいじったりするスタイルでして、tmux をおおいに活用しています。

https://github.com/tmux/tmux

みんな tmux 使おう

tmux では、ひとつのセッション中にウィンドウをたくさん作ることができるようになっていて、同時並行の作業がやりやすいです。ちなみにここで言ってるウィンドウとは、タブブラウザで言うところのタブと同様のものと捉えてもらって間違いないです。

自分が関わっているプロジェクトではリポジトリがたくさんあるので、だいたいリポジトリごとにセッションを作っています。つまり「作業中のリポジトリの数だけセッションがあり、各セッションの中にはウィンドウがたくさんある」といった環境です。画像もなしに難解な説明である。伝わるだろうか。

  • セッション1
    • ウィンドウ1
    • ウィンドウ2
    • ウィンドウ3
  • セッション2
    • ウィンドウ1
    • ウィンドウ2

↑ こんな感じ。

現在選択中のセッション内にどんなウィンドウがあるかどうかは、常に画面上に一覧表示されるように設定しています。自分は Prefix を C-l にしているので例えば C-l 1 とかすると1番目のウィンドウに切り替えできます。サクサクです。超便利です。みんな tmux 使おう。

セッションの切り替えがわずらわしいのだ

ウィンドウの切り替えには課題を感じていません。

しかし、セッション1からセッション2へなど、セッション間の切り替えには結構わずらわしさを感じています。一因として、セッションの一覧は別画面で表示するようにしているので、いちいちその中から選択するという工程がヤバそうです。

自分は .tmux.conf に以下のように記述していました。

bind -n M-a choose-tree -s

Alt-a をタイプするとセッション一覧が表示され、そこから選択したセッションに切り替えることができます。jk で選択して Return するか、各セッションに自動付与されているインデックスの番号を入力するかって感じです。

こうして文章にしてみると全然わずらわしくなさそうで 何いってんだコイツは って感じですけど…なんかあんまり素早く切り替えできないんですよね…。インデックスがついてると言っても、番号とセッションが頭の中で紐付いてないので、毎回位置を探してってやらないといけなくてすごいもどかしい。

セッション名で選択したい

セッションには名前をつけられます。なので、セッションの一覧画面を表示したらセッション名を入力して Return で選択したい。そうすれば一覧に書いてあることをあまり見る必要ないんで楽なはず。というわけで本題。

調べてみたら、tmux のキーバインドではシェルのコマンドも呼び出せるらしい。 .tmux.conf に以下のように記述します。

bind -n M-a run-shell "tmux list-sessions -F \"[##{session_windows}] ##S\" | fzf-tmux | sed 's/^\[[0-9]*\] //' | xargs tmux switch -t"

これで Alt-a をタイプすると、セッションの一覧を fzf で絞り込み選択できるようになります。超便利な気がする!しかし、以前みたいにインデックス番号をタイプする最小限の切り替えスタイルが恋しくなる…まあ普通にコマンド実行できるってわかったので、こんど時間がある時に作ってみようかな。

ちなみに Alt-a は Mac だと Cmd-a ですね。