18-12-11 tmuxを使おう
本来はIT宗教戦争について話そうとしていましたが、なんか面白いところに着地できなさそうだったので急遽番組を変更して。
魅力
とりあえず最初にどんな感じにできるか見てもらってうおーすげーかっけーと思ってもらったほうが興味出ると思うので。
https://gyazo.com/de7a373ba4774a53a82fb1f75c00a53b
カスタマイズしていくとこんな感じの画面にできます。
といっても今回はtmux自体をオススメするだけなので、なんか下のバーとかは出ませんが。
実際に使ってみて思ってたのと違うってなったらごめん。
あと(仕様|用語|魅力)解説がもっぱらで、インストール方法や実際のコマンドなんかは説明しません。
その辺は誰が書いても一緒だからね。
tmuxとは
これもう散々Qiitaとかで書かれてて調べれば一発で出てくるのですけど、誤解を恐れず言うならば複数の端末の状態を保持するソフトウェアと思ってもらえば良いと思います。
普通、複数のタスクをこなそうと思ったら新しいターミナルを開くか、タブを開くかになると思います。
記憶が正しければデフォルトターミナルでは画面分割ができず、一応screenコマンドを使えば横分割はできるのですが、縦分割はできなかった気がします。
複数のプロジェクトを受け持っている際に「このウィンドウはこのプロジェクトで…」といちいち覚えて切り替えていては作業効率がガタ落ちします。
更に言えばターミナルは一度終了してしまうと、前回までやっていた作業のログなどが全て消えた状態から始まります。これ、地味に面倒ですよね。
こういった欠点を解消するためtmuxを使用します。
tmuxではターミナル環境をセッションとして管理します。
1つのセッションの中には複数のウィンドウが存在し、一つのウィンドウには任意個のペインが存在する。
…
横文字だらけでわかりにくいですね…(余裕があったら画像作って貼り付けときます…)
セッションはn個のウィンドウを含み、ウィンドウはn個のペインを含みます。
IDEでプロジェクト作ったときに例えてみましょう。
https://gyazo.com/cafc0160afdb2427d86ccfe4332898b9
セッションはプロジェクトです。
ウィンドウは開いているタブです。
ペインは分割された画面です。
ウィンドウに関してはちょっと語弊がありそうですけど、まあ大体そんな感じです。
セッションは現在のターミナルのログを保存し、一度セッションを終了し再度開いた場合でも前回と同じ状況から開始できます。
セッションは複数作成できます。そのため、現在のプロジェクトの作業を一旦切り上げてセッションから離脱し、別の進行中のプロジェクトのセッションを開き、前回の続きから再開することができます。
このセッションを開く行為をアタッチと言います。逆にセッションから離脱する行為をデタッチと言います。
セッション、及びウィンドウには任意の名前をつけることができます。アタッチする際にその名前を入力すれば、該当するセッションにアタッチしてくれます。こうすることで何のプロジェクトなのか、何の作業をしているウィンドウなのかを明確にすることができます。
tmuxはキーバインドが豊富で、基本的にマウスカーソルは一切必要ありません。
更にキーバインドは変更可能なため、自分の覚えやすい配置にすると良いと思います。
もしキーバインドを忘れてしまった場合でも、Prefixコマンド + ?でいつでもキーバインドを確認できます。
とりあえずは
Prefix Ctrl + b
ペインの分割 Prefix + % Prefix + "
ペインの移動 Prefix + arrow
ペインのリサイズ Prefix + (esc + arrow)
新規ウィンドウ Prefix + c
ウィンドウ切り替え Prefix + w Prefix + n Prefix + p Prefix + l
デタッチ Prefix + d
あたりを覚えておくと良いでしょう!
おすすめ設定
まあこれも僕の.tmux.confを見てください!で終了するんですけど、あれ慣れない内はすごい見辛いのでいくつか紹介します。 tmuxのコマンドはPrefixコマンド + 何らかのキー で実行するため、Prefixだけは必ず自分が覚えていられるキー設定にしたほうがいいと思います。
慣れない内はペインの選択やテキスト選択をマウスで行えるようにする設定があります。ただたまにバグりますので自分はオフにしています。
デフォルトの状態ではtmux実行中にopenコマンドは使えません。そのため
set -g default-command "reattach-to-user-namespace -l /bin/zsh"
を.tmux.confに記述してopenコマンドを使えるようにすることをオススメします。
最初のスクリーンショットにある感じの画面にしたいならtmux-powerlineというものを調べてみればいいよ。
あと僕が(分かる|覚えてる)範疇なら答えますのでSlackで聞いてください。