Ubuntu Weekly Recipe

第292回 .tmux.confの設定をしてみよう

この記事を読むのに必要な時間:およそ 4.5 分

ウィンドウ分割コマンド

GNU Screenライクなキーバインドはこのあたりにして,tmuxに便利な設定を追加してみましょう。

tmuxには,1枚のウィンドウを複数のペインに分割する機能があります。次の例では,ウィンドウを縦線によって2つに分割し,左側では通常のシェルを,右側ではtopを実行しています。

図4 左側にシェル,右側にtop

図4 左側にシェル,右側にtop

tmuxのウィンドウの操作は少々覚えにくいので,なんらかのキーバインドを割り当ててしまうことをお勧めします。以下は筆者が利用している設定です。Emacs風に,エスケープシーケンス+2で横線による分割,+3で縦線による分割,エスケープシーケンス+oでペイン間を移動,エスケープシーケンス+1で元に戻す,というものです。

unbind 1
bind-key 1 break-pane \; display-panes
unbind 2
bind-key 2 split-window -v \; display-panes
unbind 3
bind-key 3 split-window -h \; display-panes
bind-key -r C-o   select-pane -t :.+ \; refresh-client
bind-key -r o display-panes \; select-pane -t :.+ \; refresh-client

unbind C-k
bind-key C-k confirm kill-pane
unbind K                                                                                     
bind-key K confirm kill-pane

この設定では,Emacs風のウィンドウ分割操作(=split-windowやbreak-paneの呼び出し)に加えて,display-panes(分割されたペインの番号を表示するコマンド)を呼び出すことで,ウィンドウが分割されたことが目立つようになっています。また,⁠C-k」でペイン単位に削除するようにキーバインドを割りつけています。tmuxではこの操作はウィンドウ単位で消えてしまいますので,少し動作を後退させたことになります。

また,ウィンドウを分割してからコマンドを実行するのは面倒だ,という場合,次の設定を追加しておくと良いでしょう。

bind-key t   command-prompt -I "ssh " -p "new:"    "new-window -n '(%1)' '%%'"
bind-key T   command-prompt -I "ssh " -p "sub(|):" "split-window -h 'exec %%'"
bind-key C-T command-prompt -I "ssh " -p "sub(-):" "split-window -v 'exec %%'" 

この例では次のようにt/T/C-tに動作を割り振っていますが,C-1/C-2/C-3を割り当てたくなるのですが,残念ながらターミナル上ではCtrlキーとの組み合わせはアルファベットにしか機能しません。!/@/#や!/"/#を割り当てる,という手もありますが,今度は設定ファイルを見たときに「このシーケンスはいったい何だろう,わけわかんないぞ」とばかりに削除しかねないので,あまりお勧めしません。

  • エスケープシーケンス+t:新しいウインドウを作成してコマンドを実行
  • エスケープシーケンス+T:縦線で分割してコマンドを実行
  • エスケープシーケンス+C-t:横線で分割してコマンドを実行

この設定は,⁠コマンド名をプロンプトから対話的に受け取り,受け取ったコマンド名を新しいウィンドウ(もしくは既存のウィンドウを分割したもの)で開く」というものです。実行すると次のように,画面最下部にプロンプトが展開されます。sshの接続先等を入力すると,自動的に新しいウィンドウが開く(あるいは分割される)ことになります。

図5 画面最下部のプロンプト

図5 画面最下部のプロンプト

また,プロンプトには初期値(-I)として「ssh 」が与えられていますが,これを削除して別のコマンドを実行することもできます。以下の例ではtopを実行しています。

図6 ウインドウが横線で分割された

図6 ウインドウが横線で分割された

こうして開いたウィンドウはシェルを介在しないので,remain-on-exitがoffの場合は,コマンドが終了した段階でペインごと削除されます。ちょっとした状況確認に便利です注2)⁠ただし,標準出力に結果を吐いて終了するコマンドの場合,単に実行すると一瞬でウインドウが閉じてしまい,内容を確認することができません。lessなどにパイプ経由で流しこむのが良いでしょう。

同様に,次のようなキーバインドをマッピングしておくと,画面の下半分に気軽にmanを表示することもできます。

もちろん終了するとペインが閉じられる「使い捨て」の特性もそのままです。コマンド実行時に気軽にmanを引くクセのない人にもお勧めします。

bind-key C-m command-prompt -p "man:" "split-window -v 'exec man %%'"

図7 画面下部で使い捨てのmanページを開く

図7 画面下部で使い捨てのmanページを開く

さらに,次の設定を加えておくと,⁠コマンドをバックグラウンドで実行する」という機能を実現できます。

bind-key r   command-prompt -p "(run-shell)" "run-shell '%%'" 

実行されたコマンドはバックグラウンドで走り続け,終了した時点でtmuxのバッファ(コピーモードで入るのと同じ操作の専用バッファ)に展開されます。長時間かかるコマンドには不向きですが,ちょっとしたコマンドの出力を確認したい場合に便利です。

図8 バックグラウンドで実行したコマンド

図8 バックグラウンドで実行したコマンド

注2)
remain-on-exitがonであれば,そのまま(ユーザが閉じるまで)残留します。

著者プロフィール

吉田史(よしだふみひと)

Ubuntu Japanese Team Member株式会社創夢所属。システム管理を中心にWindows/PC Unixを併用している。Ubuntu Japanese Teamではパッケージサーバの管理や翻訳などの作業を担当。

コメント

コメントの記入