こんにちは。ナミレリです。今回はtmuxの設定について紹介します。ターミナルソフトはalacurittyを使いtmuxを使っていきます。この環境でTrue Color(24bit color)の表示にちょっと手間取りましたので、alacritty + tmuxでしっかりTrue Color(24bit color)を表示する方法も紹介していきます。
この記事はこんな人にオススメ
- 新しいターミナルソフトを探しているユーザー
- イケてるコマンドラインが好きな方
- 性能や応答速度を重視するユーザー
- カスタマイズ性を求めるユーザー
- コマンドラインが好きな方
- 高度なテキスト編集を行いたい方
- MacBook Pro 14インチ M1Max(メモリ32GB)
- macOS Ventura 13.5.2
- Parallels Desktop 19 for Mac(Parallelsの公式サイト)
- tmux 3.3a
- alacritty 0.12.2 (9d9982d)
目次
tmuxとは?
tmux(terminal multiplexer)とは、複数のターミナルセッションを1つの画面内で操作・管理することができるツールです。
下の画像のように、1つのターミナルウィンドウで複数のターミナルを立ち上げてそれぞれで作業したり、また同時に同じコマンドを入力するなど、ターミナル画面を分割して操作・管理することができます。
どんな時に便利なのか?
そんなtmuxですが、具体的にどんな時に便利なのかをまとめてみます。
1. セッションの継続
tmuxの最大のメリットはセッションを継続することができることです。例えばSSHでサーバーに接続している最中にネットワークが切断したとしてもtmuxセッションは継続されます。切断後、セッションに再接続(アタッチ)することができます。
具体的には、例えば
リモートサーバー上で大規模なデータ分析を行っていて、数時間かかるプロセスを実行中。途中結果もチェックしながら作業している最中、突然ネットワークのトラブルでSSH接続が切れてしまった・・・・なんて時もセッションを再開することができます。
2. 効率的な作業
tmuxは、キーボードショートカットでほぼ全ての操作を行うことができるので、マウス操作をせずとも複数のセッションやウィンドウ、パネル間を素早く行き来することができます。
例えば、
プログラム開発、テストの実行、ログの確認、データベースへのクエリ実行など、複数のタスクを並行して行う場合に、上にプログラム開発画面、右上にテスト実行画面、左下にログ確認、右下にデータベースへのクエリ実行画面といったような配置を作ることができます。
また、キーボードショートカットを使って、素早く各パネル間を移動・切り替えることもできます。
3. カスタマイズ性
ユーザーの好みや作業のスタイルに合わせて、tmuxの挙動や見た目をカスタマイズすることができます。自分だけの最適なターミナル環境を構築することができます。
例えば、
特定のキーの組み合わせでパネル配置に変更したり、あるアクションを実行したときの動作を変えたり、といった独自のキー設定が可能です。また好みのカラースキームを導入し、モチベーションを上げられる点もターミナルが好きな方には最高なカスタマイズ性があります。
tmuxのインストール
tmuxは多くのUnix系OSに対応しています。ここではMacのインストール方法を紹介します。今回もサクッとbrewでインストールします。
brew update && brew upgrade
brew install tmux
インストール後、バージョンを確認しておきます。
tmux -V
tmux 3.3a
True Color(24bit color)を表示する
tmuxの設定の前に、alacrittyとtmuxの場合のハマりどころである、True Color(24bit color)の表示をできるようにします。
iTerm2とtmuxでTrue Color(24bit color)をテスト
iTerm2とtmuxの場合は、何もしなくてもTrue Color(24bit color)が表示できますので、まずはiTerm2で以下のコマンドを入力し確認してみます。横幅は128列以上のサイズで実施すると綺麗に出力されます。
iTerm2でtmuxを起動します
tmux
TERMの設定
export TERM=xterm-256color
echo $TERM
xterm-256color
iTerm2でTrue Color(24bit color)表示のテスト
curl -s https://gist.githubusercontent.com/lifepillar/09a44b8cf0f9397465614e622979107f/raw/24-bit-color.sh | bash
alacrittyとtmuxでTrue Color(24bit color)をテスト
今度は、alacrittyとtmuxでTrue Color(24bit color)表示のテストをしてみます。結論からお伝えするとデフォルトの状態だと正常に表示されません。
alacrittyでtmuxを起動します
tmux
TERMの設定
export TERM=xterm-256color
echo $TERM
xterm-256color
infocmpで確認
infocmp xterm-256color| head -1
/usr/share/terminfo/78/xterm-256color
alacrittyでTrue Color(24bit color)表示のテスト
curl -s https://gist.githubusercontent.com/lifepillar/09a44b8cf0f9397465614e622979107f/raw/24-bit-color.sh | bash
では、この状態を修正してみます。
alacrittyとtmuxでTrue Color(24bit color)を表示する
下のコマンドでxterm-256colorを新たに作り、ホームディレクトリの~/.terminfoに追加します。
ポイント
/opt/homebrew/Cellar/ncurses/6.4/bin/infocmp -x xterm-256color > xterm-256color.src
sudo /usr/bin/tic -x xterm-256color.src
~/.config/tmux/tmux.confで以下の様に設定します。:Tcフラグは、tmuxがTrue Colorをサポートするための設定を追加しています。
tmux.confの設定
set -g default-terminal "xterm-256color"
set-option -ga terminal-overrides ",xterm-256color:Tc"
次にalacrittyでtmuxを起動してTERM=xterm-256colorを指定します。
Alacrittyのインストールは下の記事に詳しく紹介しています。
alacrittyでtmuxを起動します
tmux
TERMの設定
export TERM=xterm-256color
echo $TERM
xterm-256color
infocmpで確認
infocmp xterm-256color| head -1
/Users/u/.terminfo/78/xterm-256color
では再度、True Color(24bit color)の表示テストをします!
alacrittyの横幅は128列以上のサイズで実施すると綺麗に出力されます。
alacrittyでTrue Color(24bit color)表示のテスト
curl -s https://gist.githubusercontent.com/lifepillar/09a44b8cf0f9397465614e622979107f/raw/24-bit-color.sh | bash
alacrittyとtmuxでTrue Color(24bit color)が表示できましたので、次はtmuxの詳細設定をしていきます。
Tmux Plugin Manager(tpm)の設定
まずはプラグインの設定からやっていきます。
1. tmuxのプラグインマネージャのインストール
tmuxのプラグインマネージャであるTmux Plugin Manager(tpm)をインストールします。tpmはtmuxのプラグインを簡単に管理・インストール・更新するためのプラグインマネージャです。
- プラグインのインストール: GitHubから直接プラグインを簡単にインストールできる。
- プラグインのアップデート: すべてのプラグインを一度に更新できる。
- プラグインの削除: 不要なプラグインを簡単に削除できる。
下のコマンドでTmux Plugin Manager(tpm)をgit cloneします。公式通りにやります。
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
続いて、以下の7個のプラグインをインストールしてみます。
2. インストールするプラグインについて
tmuxの各プラグインのインストールは、tmuxの設定ファイルである~/.config/tmux/tmux.confに書きます。
mkdir ~/.config/tmux/
vi ~/.config/tmux/tmux.conf
# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @plugin 'sainnhe/tmux-fzf'
set -g @plugin 'catppuccin/tmux'
set -g @plugin 'tmux-plugins/tmux-pain-control'
set -g default-terminal "xterm-256color"
set-option -ga terminal-overrides ",xterm-256color:Tc"
# プラグインマネージャの初期化(とりあえず最下部に記載)
run '~/.tmux/plugins/tpm/tpm'
今回インストールするプラグインの概要は以下の通りです。
プラグイン | 説明 |
---|---|
tmux-plugins/tpm | tmuxのプラグインマネージャです。 |
tmux-plugins/tmux-sensible | 便利な基本的な設定をセットしてくれます。 自分で設定した内容を上書きしないので安心です。 |
tmux-plugins/tmux-resurrect | セッションの状態を、手動で簡単に保存・復元ができます。 |
tmux-plugins/tmux-continuum | セッションの状態を、自動で保存・復元ができます。 (tmux-plugins/tmux-resurrectが必要) |
sainnhe/tmux-fzf | セッション、ウィンドウ、ペインの操作をfzfを使って操作できる。 |
catppuccin/tmux | Catppuccinoのカラーテーマです。 (今回はCatppuccinoのカラーで統一します) |
tmux-plugins/tmux-pain-control | ペインの操作を拡張し簡単に操作するためのプラグインです。 |
3. tmuxのプラグインのインストール
tpmによるプラグインのインストールをしてみます。
tmuxを起動し、Ctrl + b の後にI(大文字のi)でプラグインをインストールします。
キーバインド | 説明 |
---|---|
Ctrl + b の後に、I | プラグインのインストール |
Ctrl + b の後に、U | 全てのプラグインのアップデート |
Ctrl + b の後に、alt+u | プラグインリストにないプラグインを削除する |
Tmux Plugin Manager(tpm)によるプラグインのインストール方法は、シェルからコマンドでも可能です。以下のようにコマンドを実行します。
~/.tmux/plugins/tpm/bin/install_plugins all
また、デフォルトではprefixにCtrl + b が設定されています。私は慣れてしまっていますが、多くの方は自分が押しやすく、他のキーと被らないprefixに工夫しています。
例えば、
Ctrl + a、Ctrl + space 、Ctrl + \、Ctrl + s、Ctrl + `、
Ctrl + z、Ctrl + g、Ctrl + o、Ctrl + q、Ctrl + @
など。
prefixの設定方法はこの後紹介します。
tpmによるプラグインのアップデート
Tmux Plugin Manager(tpm)によるプラグインのアップデート方法は、シェルからコマンドでも可能です。以下のようにコマンドを実行します。
~/.tmux/plugins/tpm/bin/update_plugins all
tmuxの設定
tmuxの設定ファイルは~/.config/tmux/tmux.confです。
vi ~/.config/tmux/tmux.conf
現時点の設定ファイルは、上部にプラグインのリストがあり、最下部にrun '~/.tmux/plugins/tpm/tpm'がある状態です。
~/.config/tmux/tmux.conf
# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @plugin 'sainnhe/tmux-fzf'
set -g @plugin 'catppuccin/tmux'
set -g @plugin 'tmux-plugins/tmux-pain-control'
#################################
##
##
## 基本的にはここに設定を書いていきます。
##
##
#################################
set -g default-terminal "xterm-256color"
set-option -ga terminal-overrides ",xterm-256color:Tc"
# プラグインマネージャの初期化(とりあえず最下部に記載)
run '~/.tmux/plugins/tpm/tpm'
TERMの設定
TERMの設定ですが、上でalacrittyでTrue Color(24bit color)を表示するように、新たなxterm-256colorを作り~/.terminfoに追加しました。そのxterm-256colorを使うために下の設定をします。
~/.config/tmux/tmux.conf
## default term
set -g default-terminal "xterm-256color"
set-option -ga terminal-overrides ",xterm-256color:Tc"
prefixキーの設定
次にprefixキーの設定です。デフォルトではCtrl + b が設定されています。私は慣れてしまっていますが、多くの方は自分が押しやすく他のアプリ(vimなど)と被らないprefixに工夫しています。
下の例は、デフォルトのCtrl + b を解除し、Ctrl + Spaceに設定する例です。
~/.config/tmux/tmux.conf
## prefix key
unbind C-b
set -g prefix C-Space
bind C-Space send-prefix
tmuxのprefixキーをCtrl + Spaceに設定する際は、Macで設定されているCtrl + Spaceの設定を無効にしておく必要があります。
[システム設定]→[キーボード]→[キーボードショットカット]→[入力ソース]でチェックを外して無効にしておきます。
設定ファイルを再読込するキーバインド
カスタマイズ好きの皆さんも私も、頻繁に設定ファイルを再読込みすることになりますので、prefix + rで設定ファイルを再読込みし、Reloaded tmux confと表示するように設定します。
~/.config/tmux/tmux.conf
## reload of the config
unbind r
bind r source-file "~/.config/tmux/tmux.conf" \; display "Reloaded tmux conf"
見た目の設定(catppuccin)
tmuxの見た目で重要なステータスバーを設定します。下の画像のようにカスタマイズしました。
この記事ではacacrittyにFiraCode Nerd Fontを設定しています。詳しくは以前の記事をご覧ください。
## catppuccin config
set -g @catppuccin_window_left_separator "█"
set -g @catppuccin_window_middle_separator " "
set -g @catppuccin_window_right_separator_inverse "yes"
set -g @catppuccin_window_right_separator "█"
set -g @catppuccin_window_number_position "left"
set -g @catppuccin_window_default_fill "none"
set -g @catppuccin_window_current_fill "all"
set -g @catppuccin_window_default_text "#W"
set -g @catppuccin_window_current_text "#W"
set -g @catppuccin_directory_color "yellow"
set -g @catppuccin_status_modules_right "directory application"
set -g @catppuccin_status_modules_left "session"
set -g @catppuccin_status_left_separator "█"
set -g @catppuccin_status_right_separator ""
set -g @catppuccin_status_right_separator_inverse "yes"
set -g @catppuccin_status_fill "all"
set -g @catppuccin_status_connect_separator "no"
# status statusline position
set -g status-position top
set -g status-interval 1
先程設定したprefix + rで設定ファイルを再読込みしてください。
コピーモードの設定
tmuxのコピーモード内でvimのようなテキスト選択とコピーの動作を実現するように設定します。
## coye mode vi keybind
setw -g mode-keys vi
## Start selection with 'v'
bind -T copy-mode-vi v send-keys -X begin-selection
## Copy to clipboard with 'y'
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "pbcopy"
トラックパッドでスクロールする設定
デフォルトではトラックパッドでスクロールすると、コマンド履歴が遡る状態なので感覚的に期待している過去の出力バッファをスクロールできるように、マウスに関連する機能を有効にします。
## scroll
set -g mouse on
- クリックでペインをアクティブにすることができる
- ペインの境界をドラッグしてペインのサイズを調整することができる
- バッファをスクロールできる
tmux-fzfの設定
tmux-fzfは、セッション、ウィンドウ、ペインの操作をfzfを使ってtmux内で操作できます。
下の例は、そのfzfインタフェースのサイズや線の色などをカスタマイズしています。
fzfは事前にインストールしておく必要があります。
brew install fzf
~/.config/tmux/tmux.conf
TMUX_FZF_LAUNCH_KEY="C-f"
TMUX_FZF_OPTIONS='--height 40% -w 60% --border --inline-info --color=border:#94e2d5 --preview "bat --style=numbers --color=always --line-range :200 {}" --preview-window=+{2}+3/2 --color=fg:#a9b1d6,hl:#f5c2e7,fg+:#a6e3a1,bg+:#1a1b26,hl+:#fab387'
tmux-fzfの起動は、上の設定のようにctrl + fに設定しています。tmuxのprefixキーの後に、ctrl + fで起動します。
tmux-pain-controlの使い方
ペインの操作を拡張し簡単に操作するためのプラグインであるtmux-pain-controlを、上でインストールしましたので、使い方を紹介します。
tmux-pain-controlを使うとペインの分割や移動をvimのカーソルの動きと同様の操作で可能となります。これを実現するためにプラグインを使わなくてもtmux.confに設定を書く方法もありますが、プラグインを使うことをおすすめします。
ペインの分割
tmux-pain-controlを使ったペインの分割は下の通りです。
prefix + - | 現在のペインを上部と下部の2つに分割 |
prefix + | | 現在のペインを左右の2つに分割 |
prefix + \ | 現在のペインの全幅を左右の2つに分割 |
prefix + _ | 現在のペインの完全な高さを上部と下部の2つに分割 |
ペインの移動
tmux-pain-controlを使ったペインの移動は下の通りです。
prefix + h(またはprefix + C-h) | 左側のペインに移動 |
prefix + j(またはprefix + C-j) | 下にあるペインに移動 |
prefix + k(またはprefix + C-k) | 上にあるペインに移動 |
prefix + l(またはprefix + C-l) | 右側のペインに移動 |
ペインのサイズ調整
tmux-pain-controlを使ったペインのサイズ変更は下の通りです。
prefix + shift + h | ペインを左側に拡大(5文字分) |
prefix + shift + j | ペインを下側に拡大(5文字分) |
prefix + shift + k | ペインを上側に拡大(5文字分) |
prefix + shift + l | ペインを右側に拡大(5文字分) |
拡大する文字数を設定することができます。下の例は10文字分に設定。
~/.config/tmux/tmux.conf
set-option -g @pane_resize "10"
ペインの入れ替え
ペインの入れ替えはtmux-pain-controlには含まれていませんので、デフォルトのキーバインドを紹介します。
prefix + { | 現在のペインと前のペインの位置を入れ替える |
prefix + } | 現在のペインと後のペイン(後に作ったペイン)の位置を入れ替える |
ウィンドウの位置入れ替え
tmux-pain-controlを使ったウィンドウの位置入れ替えは下の通りです。(ペインではなくウィンドウです)
prefix + < | ウィンドウを左に移動 |
prefix + > | ウィンドウを右に移動 |
ネストされたtmuxセッションのprefixについて
ネストされたtmuxセッションでも同じprefixを使用したいと思います。
ローカル側のprefix
set -g prefix C-b
リモート側のprefix
set -g prefix C-b
bind C-b send-prefix
こうすることで、リモート側のtmuxセッションでC-bを2回連続で押すとリモート側のtmuxプレフィックスとして認識されます。
localeの設定
tmux -uで起動してlocaleを念のため確認します。
locale
LANG=""
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=
上のように環境変数LANGやLC_ALLが設定されていない場合は、~/.zshrcに以下を追加します。
~/.zshrc
export LC_ALL=ja_JP.UTF-8
export LANG=ja_JP.UTF-8
source ~/.zshrcして再度、localeしてみます。
locale
LANG="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_CTYPE="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_ALL="ja_JP.UTF-8"
alacrittyを立ち上げたらtmuxを自動起動する
alacrittyの設定ファイルは、バージョン0.12まではYAML形式です。バージョン0.13以降はTOML形式に変更されています。
~/.config/alacritty/alacritty.yml
shell:
program: /bin/zsh
args:
- -l
- -c
- "/opt/homebrew/bin/tmux a -t 0 || /opt/homebrew/bin/tmux -u"
~/.config/alacritty/alacritty.toml
[shell]
program = "/bin/zsh"
args = [
"-l",
"-c",
"/opt/homebrew/bin/tmux a -t 0 || /opt/homebrew/bin/tmux -u",
]
tmuxのキーバインド一覧
tmuxのキーバインド一覧は、prefix + ?で表示することができます。以下は、prefixキーをCtrl + Spaceに設定している場合のキーバインドです。
ペイン操作
キーバインド | 説明 |
---|---|
C-Space C-o | ペインを順番に回転 |
C-Space C-z | 現在のクライアントを一時停止 |
C-Space ! | ペインを新しいウィンドウに分割 |
C-Space E | ペインを均等に広げる |
C-Space { | アクティブなペインを上のペインと入れ替え |
C-Space } | アクティブなペインを下のペインと入れ替え |
C-Space z | アクティブなペインをズーム |
C-Space x | アクティブなペインを終了 |
ウィンドウ操作
キーバインド | 説明 |
---|---|
C-Space & | 現在のウィンドウを終了 |
C-Space , | 現在のウィンドウの名前を変更 |
C-Space . | 現在のウィンドウを移動 |
C-Space n | 次のウィンドウを選択 |
C-Space p | 前のウィンドウを選択 |
C-Space 0-9 | 指定した番号のウィンドウを選択 |
セッション操作
キーバインド | 説明 |
---|---|
C-Space $ | 現在のセッションの名前を変更 |
C-Space s | セッション一覧から選択 |
C-Space D | 一覧から選択してデタッチ |
クリップボード操作
キーバインド | 説明 |
---|---|
C-Space [ | コピーモードに入る |
C-Space ] | 最新のペーストバッファをペースト |
C-Space # | すべてのペーストバッファを一覧表示 |
C-Space = | ペーストバッファを一覧から選択 |
C-Space : | コマンド入力プロンプトを開く |
その他の操作
キーバインド | 説明 |
---|---|
C-Space ; | 最後にアクティブだったペインに移動 |
C-Space ? | キーバインディングの一覧を表示 |
C-Space / | キーバインディングを説明 |
C-Space C | オプションをカスタマイズ |
C-Space M | マークされたペインをクリア |
C-Space d | 現在のクライアントをデタッチ |
C-Space f | ペインを検索 |
C-Space i | ウィンドウ情報を表示 |
C-Space m | マークされたペインをトグル |
C-Space q | ペイン番号を表示 |
C-Space t | 時計を表示 |
C-Space w | ウィンドウを一覧から選択 |
C-Space ~ | メッセージを表示 |
C-Space DC | ウィンドウの表示部分をカーソルに合わせてリセット |
C-Space PPage | コピー・モードに入りスクロールアップ |
C-Space Up/Down/Left/Right | アクティブなペインの上下左右にあるペインを選択 |
C-Space M-1 to M-5 | ペインのレイアウトを設定 |
C-Space M-n | アラートのある次のウィンドウを選択 |
C-Space M-o | 逆順でペインを回転 |
C-Space M-p | アラートのある前のウィンドウを選択 |
C-Space M-Up/Down/Left/Right | ペインのサイズを5単位で上下左右に変更 |
C-Space C-Up/Down/Left/Right | ペインのサイズを1単位で上下左右に変更 |
C-Space M-C-Space S-Up/Down/Left/Right | ウィンドウの表示部分を上下左右に移動 |
最後に
最後まで読んでいただきありがとうございます。alacrittyで使うtmuxを設定するはいかがでしたでしょうか。
tmuxはカスタマイズ性と拡張性が高く、まだまだ学ぶべき点や発見がたくさんあります。公式GitHubなどでぜひ自分にあったモチベのあがる設定を見つけてください。
MacやLinux、Pythonなど技術系のkindle本も豊富にあります。詳しくはこちらから。
Amazonの電子書籍読み放題サービス「Kindle Unlimited」でプライム会員を対象に、最初の3か月間を無料体験できるキャンペーンを実施中。マンガ、小説、ビジネス書、雑誌など500万冊から、好きな本を何冊でも読めるキャンペーンです。
初めてkindle unlimited 読み放題をご利用の方は30日間の無料で体験できます。
期間終了後は月額980円で、いつでもキャンセルできます。
200万冊以上が読み放題。お好きな端末で利用可能です。
高速でシンプルなRust製ツールの人気記事