tmuxを自動起動する方法(複数セッションにも対応)
ターミナルを立ち上げるたびに手動でtmux
を入力・実行するのは控えめに言っても超面倒ですよね。今回はtmux初心者向けに、「ターミナルを開いた時にtmuxを自動起動する方法」を解説します。
tmux自体の基本的な説明・使い方は別の記事にて解説しています。
まずはシェルのプラグインを見てみよう
まずシェルのプラグインをチェックしておきましょう。たとえば、ZshのプラグインマネージャーOh My Zshでは、公式でtmuxプラグインを提供しています。
Oh My Zshでの例
Oh My Zshであれば次のように変数の設定とプラグインを追加するだけです。
export ZSH_TMUX_AUTOSTART=trueplugins=(... tmux)
プラグインのREADMEを見てみると、他にも変数やエイリアスの設定などがあります。
プラグイン以外での設定方法
ここではzshを前提に書いていますが、内容自体は他のシェルでも構文を書き換えれば設定可能です(AIに聞けばすぐ変換してくれそう)。
次のようなスクリプトをシェルの設定ファイル(~/.zshrc
など)に書きます。
if [[ -z "$TMUX" && -z "$VIM" && "$TERM_PROGRAM" != "vscode" && $- == *l* ]] ; then tmux attach-session -t default || tmux new-session -s defaultfi
※セッションを複数使う派向けの解説は記事の後半でします。
ここから小分けに解説していきます。
条件式
条件式は入れ子を防ぐためのもので、それぞれ次のような意味です。
-z "$TMUX"
:tmuxが起動してない-z "$VIM"
:Vim/Neovimの中ではない"$TERM_PROGRAM" != "vscode"
:VSCodeの中ではない$- == *l*
:ログインシェルである
エディタ関係は各自の環境に応じて設定しましょう。
セッションの指定・作成
tmux attach-session -t default || tmux new-session -s default
tmux attach-session -t <target-session>
で指定したセッションに接続します。
「接続に失敗 = セッションが無かった」場合、tmux new-session -s <session-name>
で指定した名前のセッションを作って接続します。
セッション名指定のオプションがコマンドによって違うので注意です(-t
と-s
)。
シェルの設定ファイルのどこに書けばいいの?
条件式の中で未定義の環境変数などを使っていないのであれば、シェルの設定ファイルの冒頭でも問題ありません。
tmux終了時に自動終了したい場合
ここまではローカルで使うtmuxの話でしたが、tmuxはサーバー側にインストールして使うケースもあります。
ssh先で接続を切りたい時に「tmux内でexit
、tmux起動前のシェルでexit
」だと2回exit
があって面倒です。
こういった場合はexit
を入れておきます。
if [[ -z "$TMUX" && -z "$VIM" ]] ; then tmux attach-session -t default || tmux new-session -s default exitfi
tmuxのセッションから抜けた時、tmux起動前の元のシェルに戻るのではなく そのままssh接続を終了 します。
ローカル側でtmuxを使う場合は不要だと思います。
複数のセッションを使う派の人
ここまでの解説は「基本セッションをdefault
の1つだけで運用する」想定でした。
「セッションを複数使い分けている」「接続するセッションは選びたい」という場合、次のように設定できます。
if [[ -z "$TMUX" && -z "$VIM" && "$TERM_PROGRAM" != "vscode" && $- == *l* ]] ; then # セッション一覧を取得 sessions=$(tmux list-sessions -F "#{session_name}: #{session_windows} windows" 2>/dev/null)
if [[ -z "$sessions" ]]; then # セッションが0個の場合は新規作成 tmux new-session -s default else selected_session=$(echo "$sessions" | fzf --select-1 | cut -d: -f1)
# fzfでキャンセルされた場合は何もしない if [[ -n "$selected_session" ]]; then tmux attach-session -t "$selected_session" fi fifi
選択UIとしてfzfを採用していますが、他のCLIでも置き換え可能です。
tmuxの自動起動の解説でした。筆者は今のところセッション1つでやりくりしてます。
記事を書いている中でtmux attach-session
がtmux attach
だったり結構コマンドのエイリアスが用意されているのを発見しました。まだまだ奥が深いぞtmux。