目次
- tmuxとは
- 起動して新規セッションを作成する
- windowを作成する
- window間を行き来する
- windowを分割してpaneを作成する
- paneを行き来する
- セッション間を行き来する
- 【応用】tmuxの表示内容をリダイレクトする
- 【応用】情報バーにgitのbranch名を表示する
- 【応用】現在の操作パスを表示する
- 【応用】スニペットを呼び出す
- 以上の設定の
.tmux.conf
はこちら - tmuxはバージョン互換性がかなり微妙
- YouTubeでも公開したのでチャンネル登録してくれると嬉しいです
tmuxとは
tmuxとはターミナルマルチプレクサと言われるもので、sshで作業マシンにログインして操作した際や、重いプログラムを実行するなどして帰りたいが終了せずに作業を継続したい際などが、最も簡単なユースケースです。
これだけにとどまらず、tmuxはterminalを複雑に装飾できるほか、さまざまな便利な使い方があるので実際の使用をgifアニメで録画したものを用いてご紹介します。
また、vimのようにmodeの概念があり、prefixという予約されたキーバインドがあり、これを入力することで、modeの切り替えが可能となります。デフォルトでは ctrl + b
になっています。
起動して新規セッションを作成する
DebianやUbuntuならば、sudo apt-get install tmux
でインストールできます。MacOSXならば brew install tmux
です。
ただ起動するだけならば、引数なしでOKです。
$ tmux
セッションに名前をつける際は、以下のようなオプションで起動します。
$ tmux new -s {新規セッション名}
windowを新規作成する
tmuxのセッションの中にいる状態で、ctrl + b
+ c
と入力すると新規にwindowを作成できます。prefixで置き換えた表記では、prefix + c
です。おそらく、このcの意味は createだろうと思われます。
window間を行き来する
作成したwindowの間は自由に行き来することができ、デフォルトでは、prefix + p
で前のwindowへ(pはprevious)、prefix + n
で次のwindowへ(nはnext)となります。
prefixは押すコストが大きいので、私はprefixを押さないでも発動するようにキーバインドをカスタマイズしており、shift + rightKey
で次のwindow, shift + leftKey
で前のwindowに割り当てています。
windowを分割してpaneを作成する
vimの分割のようにwindowを分割でき、かつvimのようにテキストエディタの世界に閉じないものなので、一方でvimを開き、一方でhtopを開き、一方でプログラムを実行するなど、広いterminalの利用を行うことができます。
キーバインド設定等なしでは、 prefix + "split-window -h"
, prefix + "split-window -v"
などとして分割できます。
これも入力するのが大変なので、 prefix + "-"
, prefix + "|"
にキーバインドして操作しやすくしています。
paneを行き来する
デフォルトでは、paneの移動はprefixコマンドを挟む、複雑なキーバイドですが、こちらもprefixなしで定義することができます。
私は、ctrl + shift + upKey
, ctrl + shift + downKey
, ctrl + shift + rightKey
, ctrl + shift + leftKey
をpaneの移動に割り当てており、prefixを経由しなくてもpane間の移動が可能になっています。
セッション間を行き来する
ctrl + t
にセッションの選択一覧を表示するキーバインドを割り当てており、このキーを押すと、下図のようなセッション一覧を見ることが可能になります。
上下キーで選択可能で、選ぶとそのキーに移動できます。
##【応用】tmuxの表示内容をリダイレクトする
tmuxは /dev/pts/{fooBar}
のような仮想ターミナルで、paneごとにこの仮想デバイスが作成されます。
つまり、{fooBar}
が特定できれば、あるpane Xの内容を stderr, stdoutなどに分けて、pane Y, pane Zにそれぞれ表示することができます。
作成したプログラムなどが、stderrとstdoutなどと分けてログを確認したい場合や、仮想ターミナルに読み書きもできるので、操作ログなどの証跡を残すことも可能になります。
【応用】tmuxのバーにgitのbranch名を表示する
これは、tmuxの設定ファイルである、.tmux.conf
からシェルスクリプトやpythonスクリプトを読み出せることを利用したハックです。
statusバーの通知は以下のような構文で定義可能です。
set-option -g status-right '#{host} #(tmux run-shell "tmux_hook --default true --git-path #{pane_current_path}")'
#{host}
はそのままホスト名なのですが、tmux run-shell
は任意のスクリプトを動作させ、その戻り値をステータスバーの設定に与えるものになっています。
tmux_hook
というファイル名が私が作成したスクリプトで、時間とgitのbranch名などを返すものになっていますが、どんなテキスト情報でも返せるので、例えばスクリプトの組み方によっては自分のtwitterのtimelineでも表示可能です。
##【応用】現在の操作パスを表示する
今どのディレクトリにいてどのパスにいるかはterminalでいじくり回しているときに結構確認したい事柄です。
そのたびに、pwdコマンドなどを打ちたくないので、paneの分割する境界線の場所にも情報を表示することが可能です。
setw -g pane-border-format '#{pane_tty} | #{pane_current_path}'
##【応用】スニペットを呼び出す
tmuxというターミナルを分割する機能のあるセッションマネージャなのにIDEみたいなことができるんです(すごい)。tmuxには send-keys
という設定をすることができ、特定のキーの組み合わせを入力することで、予約された文字をterminalに入力することができます。
例えば、以下の設定があると、pythonのセットアップのようなことを prefix + 1
を押すだけで実現できて、これを応用すると競プロなどでも利用可能であろうと思われます。
bind -T prefix -n 1 send-keys "import os\nimport sys\n"
以上の設定の .tmux.conf
はこちら
tmuxはバージョン互換性がかなり微妙
ネット上の文献等をみて設定したのに動かない、ということはかなりあり、その場合、自分のtmuxが新しすぎるか、古すぎることがあります。
今回はtmux 2.8以上を期待したconfigの書き方でしたが、動かないなどの際はご自身の環境をチェックしてみてください。
ご自身でデバッグする方法として、今ある書き方が変わった場合、man tmux
が今の所最もしっかりしたドキュメントなので一読いただくと良いでしょう。
YouTubeでも投稿してみました
めちゃくちゃ恥ずかしいんですが、会話の練習や表現方法の研究のために、やっています。tmuxの使い勝手を動画形式で見てみたい方は、以下のURLからご参照ください。
チャンネル登録していただけると幸いです。