目次
経緯
今更ではあるが 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-plugins/tmux-resurrect: セッションを保存・リストアするプラグイン
- tmux-plugins/tmux-continuum: セッションを自動保存するプラグイン
設定ファイルに以下を追加する
~/.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 を立ち上げる必要なし。とても便利。
早く使うべきだったな…