tmuxどんな時に使うの
研究室のgrowiで入れておくと良いソフトウェアがいくつか紹介されていて,tmuxがぱっと見どういったものなのか分からなかったのでとりあえず使ってみようという感じで使ってみました.
tmuxは1つのterminal windowで複数のterminalを立ち上げることができるソフトウェアです.それだけだとなんか複数のwindowを1つのwindowにまとめて管理できるというだけで自分的にはあまり魅力は感じないのですが,tmuxの強いところは「セッションを維持できる」というところにありました.
導入方法
brew install tmux
後の細かいconfigの設定とかはこの記事とかを参考にしました.
強みの実演
tmuxはtmux
と打つことで起動します.起動するとこんな感じで,terminal windowの中でterminal windowが開きます.ぱっと見,そのようには見えないですが開いています.
画像上部を見ると2:zsh
とwindowが増えていることがわかります.この1:zsh
と2:zsh
はprefix + 1
とかprefix + 2
とかで切り替えることができます.
こんな感じで複数のwindowを1つのterminal window内で管理することができます.
大事なのはここからです.まず適当にtmux上のwindowで作業をしてみます.今回はrustcのbuildをしてみます.
ここで一度terminalを左上のxボタンで終了してみます.そうするとtmuxを使わない場合であればこの作業は中断してしまうことになりますが,もう一度terminalを開いて確かめてみます.
tmux
と打って,prefix + s
でセッションの一覧を表示します.
ここで前回閉じたwindowで使っていた0番のセッションを選択すると,このようにbuildが継続されていることがわかります(十字キー押しちゃったのでちょっと乱れていますが).
これはwindowを閉じてもセッションが維持されていて,裏で作業が続けられていることを意味します.
自分は作業ログを取りながら作業することがよくありますが,後から見返すと足りない部分があって作業していたterminalを見返したい時があります. tmuxを使えば維持されるセッションに作業内容を丸ごと残すことができるので,間違えてterminal windowを閉じてしまった場合でも見返すことができます.
さらなる強み
これだけでも自分的には嬉しいですが,growiにも書いてある通りtmuxはssh先で使うとさらに強いです. ssh先のサーバーで何かbuildなどの時間のかかる処理をしたい時,通常はその間sshコネクションを維持しなければなりません.万が一build中などにネットワーク障害などでsshが切断された時,buildは失敗してしまいます. しかしtmuxを使うと,維持されるセッションに作業を任せることができるので,途中でsshコネクションを切っても,作業は続行されます.またsshしてtmuxコマンドを打ってセッションを選択してあげればbuild中のwindowに戻ることができます. とても便利です.
あとがき
tmuxはとても便利だと思うので使っていきたいと思います.
しかしながら,セッションを維持させるソフトウェアとしてscreen
というのもあって(こっちの方がメジャー?),そっちをあんまり使ったことがないのでどちらの方が使いやすいか見極めたいですね.
多分自分の環境ではtmux, そのほかではscreenを使う形になるのかな.自分の環境でどちらを使うかの選択があるかも.どちらにせよ端末多重化の技を覚えることができました.やった.
追記
記事を公開した後に先輩に以下の設定や機能の存在を教えてもらいました.
ステータスバーをカスタム
先ほどまでも,ステータスバーの日付の表示をいじったり,バーの位置を下から上に持ってきたりと少しカスタムされていました. ここからさらに,tmuxのプラグインを利用することでバッテリー残量を表示したり,CPU稼働率を表示したりできるようになります. プラグインはTPM(Tmux Plugin Manager)を使用して管理することができます.使用方法は下記リンクを参考にしてください.
こんな感じになる.シェルスクリプトを自作するか変更すればもっと思い通りのものにできるはず.
ちなみに設定はこんな感じです.
set-option -g status-right '#{battery_status_bg}Batt: #{battery_icon} #{battery_percentage}#{battery_remain} | Online: #{online_status} | #{cpu_bg_color}CPU:#{cpu_icon}#{cpu_percentage}'
コピーモード
prefix + [
でコピーモードに入ることができます.configでsetw -g mode-keys vi
を設定していれば,コピーモードがviのようになります.
例えばhjklキーでカーソル移動できたり,vでビジュアルモードに入って範囲を選択して,yでヤンクできたりします.
あとがき(再)
ここまでカスタムできると,ただの端末多重化ソフトウェアではなくなってきます. 他のマシンにtmuxをダウンロードして,configを持ってくれば自分の使い慣れた見た目のterminal環境を簡単に持ってくることができるのでiterm2側でステータスバーを作成するよりtmuxで作成した方が良いかも?