今回は、tmuxというCLI(Command Line Interface)時代から継がれてきた、多画面分割管理ツールの紹介です。
tmuxのような機能を使い熟すことは、ある意味でキーボードに特化したデバイスの真骨頂かもしれません。
tmuxとは
tmuxは、1つのターミナルで複数の処理を簡単に切り替えたり、或いはそれらを切り離して、バックグラウンドで実行させることができるツールです。
まだピンときていない方には、CLI(Command Line Interface)では、はるかな昔から極めてスムーズなかたちで多画面分割管理に対応していたという事実だけでも認識してもらえたらうれしいです。
多画面分割管理とは、例えば、Windowsの「Win+矢印」で実施する最大4画面分割、あるいはPowerToysのFancyzonesによる多画面デザイン、MacではSplit viewやMagnetアプリで実現している便利な多画面活用機能のことです。
また、tmuxを介して処理作業プロセスを実行することで、sshなどによるネット接続とプロセスを分離することができ、ネット接続が切断されても、バックグラウンドでプロセス実行状態が維持されます。今回深く取り上げませんが、この部分だけでも十分すぎるほど、強烈な特徴を持っているといえますね。
このようなツールは、ターミナルマルチプレクサ(端末多重接続ソフトウェア)と呼ばれ、GNU Screen(原型の初回リリースは1987年)に端を発し、tmuxはその後継的な位置にあります。
シンプルで、ある意味洗練されたコマンドラインという処理実行系統に一因があるとしても、これらの総合的な機能設計は、色褪せるどころか、今尚、最も優れたインターフェイスの一つといえるのではないでしょうか。
Tmuxの主な特徴
- マルチセッション、マルチウィンドウ
- 多画面分割(ペイン)
- ランチャー的機能
- サーバー接続(ネット接続)と処理作業プロセスとの分離独立の実現
操作
前提条件、およびインストール
UNIX系のターミナル環境が前提になります。
今回は、Androidの最小構成Linux環境アプリであるTermux上での実行について紹介していきたいと思います。
- インストール
$ pkg install tmux
tmuxセッションの起動
$ tmux
基本のキー操作
Prefixキー
- Ctrl + b
Ctrl + b を入力した後、 コマンドキーを入力することで、tmuxに操作指示をしていくことが可能になります。
ウィンドウ
新規ウィンドウ作成
Ctrl + b , c
Ctrl + b に続けて小文字の”c”を入力すると新規ウィンドウが開始されます。最初のウィンドウが番号”0”で、以降1, 2, 3, …と続きます。
ウィンドウ間移動
Ctrl + b , p
あるいは、ウィンドウ作成時の番号を指定
Ctrl + b , 0-9
ウィンドウ終了
Ctrl + b , x
”x”を入力すると、画面下にウィンドウを終了するか(y/n)確認があるので、”y”を入力すると終了します。または
$ exit
ペイン:画面分割
縦分割
Ctrl + b , %(つまりshift + 5)
横分割
Ctrl + b , "(つまりshift + 2)
分割比率の調整
Prefixキーを用いたやり方もありますが、Termux上では、マウス、もしくはタッチ操作でやる方がはるかに容易です(後に紹介する設定ファイルが無くても、Termux+tmuxではマウスに対応していました)。
ちょっと、脇道にそれますが、マウスについては、こちらもどうぞ。
ペイン間移動
Ctrl + b , o(小文字のオー)
もしくは、マウス、又はタッチ操作でもペイン間の移動は可能です。
終了
ウィンドウの終了と同様です。
ランチャー的機能
全画面をTree展開でき、矢印キーで、セッション、ウィンドウ、ペインを選択して、各画面に極めてスムーズに移動することが可能です。極めて便利です^_^
Ctrl + b , w
デタッチ、アタッチ
デタッチは、tmuxセッションから離脱してtmuxを起動したターミナルに戻る操作です。
tmuxセッションを離れても、tmux上で実行されたプロセスは、バックグランドで実行状態が維持されています。
アタッチは、バックグラウンドで実行されているtmuxセッションに復帰する操作になります。
デタッチ:tmuxセッションからの離脱
Ctrl + b , d
アタッチ:tmuxセッションへの復帰
$ tmux a
設定ファイル
ホームディレクトリ下にtmux.confというファイルを作成・編集することで、オプション機能を設定できます。
$ cd ~
$ touch .tmux.conf
$ chmod 700 .tmux.conf
~/.tmux.confをエディタで編集してきます。
マウスの操作
前述しましたが、Termux + tmuxの環境では、設定しなくても、マウスを使用することができましたが、念のため、記載を紹介したいと思います。
# ~/.tmux.conf
setw -g mouse on
コピーモードの設定
コピー時の位置移動にviのキー配置を使用
# ~/.tmux.conf
setw -g mode-keys vi
クリップボードの利用
この設定により、tmuxのコピーモードでコピーした内容を、外部ツールで使用できます。デフォルトでもexternalですが、再設定する際、以下のように記載します。
# ~/.tmux.conf
set -s set-clipboard external
設定内容の確認
$ tmux show -s set-clipboard
Termux上での未解決問題
外部ツールで、クリップボードにコピーした内容をtmux内で、張り付けることができませんでした。。
設定の反映
$ tmux source ~/.tmux.conf
コピーモードの利用
コピーモードの開始
Ctrl + b , [(つまりFn + 7)
コピーモードのキャンセル
qキー
コピー開始位置の設定
Spaceキー
範囲指定
hキー(左へ移動)
jキー(下へ移動)
kキー(上へ移動)
lキー(右へ移動)
コピー終了位置の設定(および終了)
Enterキー
コピー内容の貼付(tmux内)
Ctrl + b , ](つまりFn + 8)
コピー内容の貼付(外部ツールでの利用)
マウスのドラックでもtmuxコピーが可能です。
Ctrl + v (普通のペーストショートカット)
統合的環境の構築
Cosmo Communicator+Termuxでは、以下のような3画面分割くらいがちょうどよいのかな、と感じていますがどうでしょうか。お好みで構築してみてください^_^
- ファイル編集画面
- 実行、反映などのサポートコマンド画面
- その他、ステータスなどの表示画面
まとめ
いかがでしたでしょうか。
CLIの高度な利用方法を知ることは、ユーザーインターフェイスのデザインに想いを馳せるとき、今尚、多くの示唆を感じとる良いきっかけになるのではないでしょうか。同時にGUIとCLIは優劣ではなく、用途に応じて使い分けることが重要であることも指摘しておきたいと思います。
VscodeやJupyterlabのような統合環境に大きな影響を与えていたのではないでしょうか。
また、The Real Pocket Note PC : Cosmo Communicatorのようなキーボードデバイスとマウスとは相性が悪いわけではなく、キー操作を最大限に活かすことと、マウス操作は共存以上の発展的関係であると考えています。自分なりのキーボードとマウスの操作関係を追求し、マウスとキーボードの理想的な関係構築の一助となれば幸いです。
今回深く触れませんでしたが、多画面ウィンドウ管理とデタッチ、アタッチのような機能があることで、サーバー上の作業管理という面でも、重宝されるツールです。
TermuxのようなCLIの最大の魅力は、スマートデバイスによる、PCと変わらない環境でのアプリ開発、とまでいかなくても、いうなれば自分なりの便利コマンドを作成できること、自動処理が実行可能になること、比較的高度な情報処理を実施できること、などが挙げられると思います。そのための充実した環境をtmuxによって、CLI上でも提供されているところが非常に素晴らしいと考えています。
今回の紹介を通して、このようなCLIの観点に少しでも興味を持ってもらえたら、うれしいです。
コメント