[tmux] Star多数のgpakosz/.tmuxをベースにtmuxをカスタマイズする

tmux constom configuration example
この記事は約7分で読めます。

背景

[Byobu] window 0だけautomatic-renameが効かない問題のworkaroundを作ってみた
背景ByobuはUbuntuに初期状態でinstallされていて、設定ファイルを編集するようなカスタマイズを全く必要とせずに、terminalのタブ・分割・セッション保持等を実現出来て便利なツールと言える。課題自分はTerminal上ではあ...

上記に書いた通り、byobuはカスタマイズ性が低いこと、不具合が修正されないまま残っていることなどを踏まえて、tmuxを設定して直接使う方法を模索した。

とはいえ、自分のようにターミナルの使用・設定に慣れていない人にはtmuxは設定が難しい。初心者にはout-of-the-boxで使えるbyobuの方が向いている。

TL;DR

gpakosz/.tmuxをベースにすれば、リッチなtmux環境を比較的に簡単に手に入れることが出来る。
カスタマイズしようとすると結構手間。お手軽とは言えない。

gpakosz/.tmuxのインストール

対象環境

  • 試したのはUbuntu Linux 20.04 LTS x64
  • 公式に記載のRequirementsには特別なものは無いので、ほとんどの環境で動くと思われる
    • tmux >= 2.3 (soon >= 2.4) running inside Linux, Mac, OpenBSD, Cygwin or WSL
    • awk, perl and sed
    • outside of tmux, $TERM must be set to xterm-256color

Nerdフォントのインストール

アイコンを使っているので、Nerdフォント(を統合した日本語フォント)が必要。

インストール方法は下記の「Nerdフォントのインストール」を参照のこと。

[Zsh] Preztoを使ってお手軽にシェルを強化する
経緯CLIはあまり使いたくない。iniみたいなフォーマットの設定ファイルの手書きとかしたくない。そんな自分も色々な制約なりしがらみによってCLIを使わざるを得ないことがある。何もカスタマイズしていないbashだと補完も弱くて不便。でも、zs...

Gitのcloneとファイルの配置

もし~/.tmux.confがある場合上書きされてしまうので、バックアップを取ってから下記のステップに進む。

$ cd
$ git clone https://github.com/gpakosz/.tmux.git
$ ln -s -f .tmux/.tmux.conf
$ cp .tmux/.tmux.conf.local .

設定のカスタマイズ方法

上記でコピーした~/.tmux.conf.localを編集する。

キーバインドについては公式READMEのBindings、ステータスバーの表示内容などについては公式READMEのConfigurationに説明が記載されている。
tmuxのカスタマイズを行ったことが無い人にとって、これらの説明のみでカスタマイズするのは不可能に近い。現実には.tmux.conf.local内のコメントを読み、Googleで検索しながらカスタマイズを進めるというプロセスにならざるを得ない。

カスタマイズしてみた内容の紹介

下記は素人がgpakosz/.tmuxをベースに自分用にtmuxをカスタマイズしてみたという備忘録に留まっている。有用性には期待しないこと。

想定環境

下記の記事で設定したzsh環境で使うことを想定。

[Zsh] Preztoを使ってお手軽にシェルを強化する
経緯CLIはあまり使いたくない。iniみたいなフォーマットの設定ファイルの手書きとかしたくない。そんな自分も色々な制約なりしがらみによってCLIを使わざるを得ないことがある。何もカスタマイズしていないbashだと補完も弱くて不便。でも、zs...

カスタマイズの方向性

以下を目標にキーバインド・ステータスバーの設定を行った。

  • byobuのFxxキーおよびScreen風キーバインド(Prefix-key: Ctrl-a)をベースに、ブラウザ等のGUIアプリに近いキーバインドを実現する
  • ステータスバーの表示もbyobuっぽくする(CPU, RAM, Disk, IP, 時刻などを表示

ステータスバーのセパレーターはPowerline風(三角形のセパレーター)ではなく、下記の理由でストレートのレガシーなセパレーターを利用している。

  • Powerline風セパレーターを使うと表示が乱れるケースがあった
  • ZshのPowerlevel10kは三角形のセパレーター、tmuxはストレートのセパレーターとデザインを別にした方がが見やすい

カスタマイズ内容の公開場所

publicレポジトリにする内容に相応しい水準とは言いがたいが、GitHubにて公開中。

GitHub - figmentum/.tmux.conf.customization: tmux customization based on gpakosz/.tmux
tmux customization based on gpakosz/.tmux. Contribute to figmentum/.tmux.conf.customization development by creating an a...

キーバインドの説明は今はまだ無いので、.tmux.conf.localを直接確認してもらいたい。時間があればREADMEに記載予定。

.tmux.conf.customizationの使い方

基本はREADME > 使い方に記載した通り。

$ cd ~
$ git clone https://github.com/gpakosz/.tmux.git
$ ln -s -f .tmux/.tmux.conf
$ git clone https://github.com/figmentum/.tmux.conf.customization.git
# Repositoryの.tmux.conf.localをそのまま利用する or 直接書き換える場合
$ ln -s ~/.tmux.conf.customization/.tmux.conf.local ~/
# .tmux.conf.localをコピーして編集する場合
$ cp ~/.tmux.conf.customization/.tmux.conf.local ~/
# scriptsをPATHに追加(bashの場合)
$ echo '
if [[ -d $HOME/.tmux.conf.customization/scripts ]]; then
export PATH="$PATH":"$HOME/.tmux.conf.customization/scripts"
fi
' >> ~/.bashrc
# scriptsをPATHに追加(zshの場合)
$ echo '
if [[ -d $HOME/.tmux.conf.customization/scripts ]]; then
export PATH="$PATH":"$HOME/.tmux.conf.customization/scripts"
fi
' >> ~/.zshrc
.tmux.conf.customization/.tmux.conf.localを使う(or ベースにする)
$HOME/.tmux.conf.customization/scripts
PATHに含める
自分以外が使うことは想定していないサンプルなので、不具合や好みと合わない部分は各自修正して使って欲しい。

上記適用時の表示サンプル

tmux constom configuration example

スーパーライトユーザー向けのスーパー基本的な使い方の説明

対象ユーザー

  • byobuを特にオプション指定せずに1セッションで起動(or byobu-enable設定)しているなど、限られた基本的な使い方のみで利用している
      • Ctrl-a->Ctrl-c(新しいwindowを作成)、Ctrl-a->Ctrl-k(現在のwindowを閉じる)、Ctrl-a->Ctrl-n(次のwindow)、Ctrl-a->Ctrl-p(前のwindow)など
  •  ターミナルマルチプレクサへの期待
    • SSHを切断してもシェルが終了せず、再接続時に作業を再開出来る
    • タブで複数のシェルを同時に開いて切り替えながら使える

既存セッションがなければ新規作成、あれば既存セッションにアタッチ

$ tmux new-session -A -s default

上記コマンドで、defaultという名前のセッションが存在しない場合は新規作成、存在する場合はdefaultという名前のセッションにアタッチする。

alias byobu='tmux new-session -A -s default'

非常に乱暴だが、上のようにbyobuをこのコマンドのaliasにしてしまえば、byobuをシングルセッションで使っているときと同じような感覚で使える。

まとめ

tmuxはキーバインドが重要になるが、好みも普段使っているキーバインドも人それぞれのため、万人受けするキーバインド設定は用意しづらい。設定方法も複雑で分かりにくいので、可能な限りbyobu互換とかを狙った方が良いかもしれない。
tmuxはステータスバーの表示にも一苦労する。byobuと違ってBatteries Includedではないので、ステータスバーに表示内容を出力するためだけのシェルスクリプトを用意する羽目になり非常に面倒。
多少設定方法も分かってきて、byobu以上に使いやすい設定にすることは出来た。今後少しずつ改良しながら使っていきたい。
0 0 votes
Rate Article
Subscribe
Notify of

0 Comments
Inline Feedbacks
View all comments
タイトルとURLをコピーしました