Garbanzo Note

Tmux入門

December 13, 2021

目次


経緯

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

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

vimで調べてものしていたら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を立ち上げる必要なし。とても便利。

早く使うべきだったな…


Garbanzo

Webエンジニアの備忘録です。 学んだことをアウトプットしています。

合計記事数
25