ターミナルの分割ウィンドウ、便利ですね。OS X だと有名なターミナルエミュレータに iTerm があり、多分に漏れずこれも分割ウィンドウに対応しているのですが、愛用している AquaSKK との相性が悪く Terminal.app を使わざるを得なくなっていました。Terminal.app のウィンドウ分割は貧弱なのでしばらくタブでなんとかしていたものの、いい機会なので以前から見送っていた tmux の環境を整えることでウィンドウ管理を行なおうと思い立ったのが今回の動機です。
tmux 便利にしたいけどいい感じの設定が分からない、でもよく分からないまま他人の丸コピは嫌という方。
byobu は端末のウィンドウマネージャで、tmux をバックエンドに使っています。tmux 自体を設定していくと快適な設定までもって行くのに割と手間がかかりますが、byobu を導入するだけである程度までいい感じにしてくれます。
brew install byobu
依存管理で tmux もインストールされます。入れた直後で以下のような感じです。
もうこれで随分いい感じですね。満足した人はもうこれでもいいと思います。
tmux をよしなにしてくれるので、デタッチ([tmux-prefix]-d)後に attach を明示しなくても再度 byobu を実行すると前回のウィンドウにアタッチしてくれ、既に起動していたかどうかを考える必要が無くなります。
byobu はデフォルトでコピーモード中のキーバインドが Vim っぽくなっている(vi-copy)のもいいところです。
コピーモードの開始は Ctrl-[
、リージョンの選択開始: Space
、選択終了: Enter
、貼り付け Ctrl-]
となっています。他にも tmux のコマンドは [tmux-prefix]-?
で一覧が見れるので、こまめに確認しながらひたすら覚えていくと良さそうです。念願のウィンドウ分割は [tmux-prefix]-%
、[tmux-prefix]-|
で出来ます、やりましたね。
F1、F2、等に設定項目が割り当ててあったりするのですが、これを覚えるのも面倒です。これらは全て byobu-* プレフィクスが付いたコマンドが提供されている為、シェル補完するとどのようなものがあるか見ることが出来ます。
とにかくまずは byobu-config
してみましょう。
byobu-config
では、tmux のプレフィクスキーの設定やステータスラインに表示する項目の設定、ログイン時の自動起動設定が出来ます。ステータスラインに表示出来る項目は様々にあるのでカスタマイズが楽しいですが、OS X では動かないものもままあるようです。プレフィクスキーについては C-a を押した初回に C-a をプレフィクスとして使うか Emacs よろしく行頭への移動に使うか聞かれます。readline 系の入力では C-a をよく使うのでここはプレフィクスとせずに、byobu-config から C-t へとしておきました。
デフォルトだとステータスラインの位置は下にありますが、これが Vim のステータスラインと近くて見辛くなるので上へと変えておきます。byobu の設定ファイルは ~/.byobu/ の中にあり、バックエンドに用いる tmux の設定ファイルも配置されています。
# ~/.byobu/.tmux.conf
set -g status-position top
tmux を使っていると悩ましいのがコピーモードと OS のクリップボードの連携で、各位悩まれているのか色んな記事で触れられています。色々見た中ではこちらの設定が良さげな気がしました。私はペーストは tmux のバッファでやってくれて困らないのでコピーのほうだけ設定しています。
unbind -t vi-copy Enter
bind -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"
これは今まで何度も挫けてきたポイントで、というのも Terminal.app はこれまでマウスレポーティングが出来ず、端末内で動くマウスをサポートしているプログラム、例えば Vim などにはワークアラウンド的な設定を入れて凌いていました。
ところがなんと、遂に El Capitan に含まれている Terminal.app だとマウスレポーティングが使えるようになりました。アップデートしておもむろに 「表示 > マウスレポーティングを許可 ⌘R」をチェックしましょう。
tmux の issue を参照すると、マウスの上スクロールに対してコピーモードを開始する(=コンソールログが遡って見れる)設定がコメントされているのでこれを使わせて貰います。
### https://github.com/tmux/tmux/issues/145 ###
# Start copy mode when scrolling up and exit when scrolling down to bottom.
# The "#{mouse_any_flag}" check just sends scrolls to any program running that
# has mouse support (like vim).
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e'"
この設定がよく出来ていて、マウスをサポートしている(Vim のような)プログラムが起動していればそちらに制御を譲るようになっています。
マウスサポートのの一部でドラッグがうまく判定出来ていないようで、リージョン選択や Vim のウィンドウサイズ調整がうまくいっていません。が、両方ともキーボード操作で問題無くあまり多用するわけでも無いので対応策はのんびり探しています。
如何だったでしょうか。おまけ程度のつもりで色々設定を書き連ねてしまったらうっかり長くなってきてしまいましたが、ひとまず byobu を入れてみるだけでも使い易さが全く違うと思います。また byobu を入れられる環境であればとりあえずインストールするだけで環境が整うのも魅力的です。
ここから不便を感じるようになってきたら色々設定を盛り込んでいって、やばい byobu にしたり tmux/screen に回帰したりするのもいいかもしれません。余談ですが byobu は元々 screen をバックエンドに開発されていたのでバックエンドを切り替えることも出来ます。
それでは良いターミナルライフを!