Tmux入門

Tmuxの概要から基本操作、設定の変更、セッションの自動保存まで

Posted by garbanzo on Fri, Aug 4, 2023

目次

経緯

今更ではあるが Tmux に入門してみた。

Tmux がどんなものかざっくり知っていたが「ま、無くてもいいな」と思って触っていなかった。

調べものしていたら Tmux がヒットしたので、久しぶりに思い出して触ってみることにした。

Tumx とは?

GitHub - tmux/tmux: tmux source code

概要

端末多重化ソフトウェア。1 つターミナルで複数のターミナルを立ち上げ管理することができる。

ターミナルと終了しても維持される(セッション)ので再接続することで途中から再開することができる。

tmux を使う上で必要な概念が

  • セッション: 複数のウィンドウを管理する
  • ウィンドウ: 複数のペインを管理する
  • ペイン: ターミナル
セッション
 └── ウィンドウ
       └── ペイン

で構成される

例えば、プロジェクト A で開発用に Front・BackEnd・DB を起動して、レビュー用にもう 1 つ同じ構成起動したいとする。

セッション: プロジェクトA
   ├── ウィンドウ: Dev
   │   ├── ペイン: Front
   │   ├── ペイン: BackEnd
   │   └── ペイン: DB
   └── ウィンドウ: Review
         ├── ペイン: Front
         ├── ペイン: BackEnd
         └── ペイン: DB

というのを構成になる。

このセッションを複数立ち上げることも可能

インストール

brew install tmux

version は

$tmux -V
tmux 3.2a

操作

コマンドプレフィックス(prefix) + キーで操作する。

デフォルトCtrl+bとなっているが、私の以下では設定を変更してCtrl+qに変更している

以下、コマンドは入門してみて良く使う、これがあれば問題なさそうな操作をまとめ

セッション

コマンド 概要
tmux ls セッション一覧
tmux new -s <セッション名> ウィンドウ作成
tmux a -t セッション名> セッション再開
tmux kill-session セッション名> セッション終了

セッション接続時

コマンド 概要
prefix + s セッション一覧
prefix + d セッションからデタッチ
prefix + $ セッションの名称変更

ウィンドウ

コマンド 概要
prefix + w ウィンドウ一覧
prefix + c ウィンドウ作成
prefix + & ウィンドウ破棄
prefix + , ウィンドウの名称変更

ペイン

コマンド 概要
prefix + % 左右にペイン分割
prefix + " 上下にペイン分割
prefix + x ペイン破棄
prefix + space レイアウトを変更
prefix + カーソル ペインへ移動
prefix + option-カーソル ペインのサイズ変更

コピーモード

デフォルトは、emacsでの操作とのこと。

emacsはわからない+コマンドが他のアプリに割当われていたので使用出来ない。

よって、viでの操作にするので以下を設定ファイルに追加する。

set-window-option -g mode-keys vi

※細かな設定は以降に記載している。

コマンド 概要
prefix + [ コピーモード開始
(コピーモード時) v コピー範囲選択開始
(コピーモード時) y コピー
(コピーモード時) q コピーモード終了

※コピーの注意点

iTerm2 上でマウスでコピーしようとするとコピーできない。

option キーを押しながら操作することでコピー可能。

設定を変更する

以下点がつらいので設定を変更する

  • prefix のCtrl+bは使いにくいのでCtrl+qにする
  • マウスでのペイン選択したい
  • マウススクロールでのターミナルの出力を確認できるようにしたい

設定ファイルを作成する

touch ~/.tmux.conf

設定ファイルの再読み込みは以下のコマンド

tmux source-file ~/.tmux.conf

設定ファイル

# prefix + r で設定ファイルの再読み込み
bind r source-file ~/.tmux.conf \; display “Reloaded!”

# prefiを Ctrl+q に変更
set -g prefix C-q

# C-bのキーバインドを解除
# unbind C-b

# マウス操作を有効化
set-option -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M'
 'copy-mode -e'"

# 最後までスクロールダウンするとコピーモードを抜ける
bind-key -n WheelDownPane select-pane -t= \; send-keys -M

# vimのキーバインドでペインを移動
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# コピーモードを設定
# vimキーバインド使用
set-window-option -g mode-keys vi

# 'v' で選択を始める
bind -T copy-mode-vi v send -X begin-selection

# 'y' Enterでコピーする
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "pbcopy"
bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "pbcopy"

これで最低限使える設定になった。

セッションの保存・リストアと自動保存化する

このままだと PC 再起動時にセッションが失われてしまい再度設定しないといけなくなる。

tmux にはプラグイン機能があり、プラグインをいれる事でセッションを保存する事ができる

それと毎度保存だと、落ちた時に困るので自動化する。

TPM(Tmux Plugin Manager)をインストールと設定

まずは、プラグイン管理マネジャーのインストールと設定をする。

以下、Github を参考に。

GitHub - tmux-plugins/tpm: Tmux Plugin Manager

$ git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

~/.tmux.confに設定を追加する

# Plugin
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'

run '~/.tmux/plugins/tpm/tpm'

tmux-plugins/tmux-sensibleは、tmux のオプションセットプラグイン

上記 github の設定方法にも記載があったので追加している

設定後、ファイルを再見込み

tmux source ~/.tmux.conf

prefix + Iを実行しプラグインをインストールする

完了すると

TMUX environment reloaded.
Done, press ENTER to continue.

表示される。

ちなみにインストールしたプラグインは~/.tmux/pluginsに入る

その他 tmux プラグインは、GitHub - tmux-plugins/list に記載あり。

セッションの自動保存設定をする

以下必要なプラグイン

設定ファイルに以下を追加する

~/.tmux.conf

# Plugin
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'

# 自動保存
set -g @continuum-boot 'on'
set -g @continuum-boot-options 'iterm'

# 自動リストア
set -g @continuum-restore 'on'

ファイルを再見込み後、インストールする(コマンドは上記参照)

これでセッションが自動で保存される。

保存先は、~/.tmux/resurrect

デフォルトは 15 分間隔で保存される。変更したい場合は以下参照。

tmux-continuum/faq.md at master · tmux-plugins/tmux-continuum · GitHub

操作

保存・リストアは以下のコマンドで可能

コマンド 概要
prefix + Ctrl-s 保存
prefix + Ctrl-r リストア

まとめ

今まで BackEnd 動かして、Fornt 動かして、Docker 動かして…複数 iTerm を起動して操作していた。

Tmux を使うことでセッションで保持され切り替えも簡単に行う事ができるので何個も iTerm を立ち上げる必要なし。とても便利。

早く使うべきだったな…

Buy Me A Coffee