CHANGES を参考に、いくつか気になる点を書き出してみました。
mode-table がなくなり、key-table に統合された
今回メインの修正点として挙げられているものです。これのせいで 2.4 にした途端、コピーモードが動かずに阿鼻叫喚です。
2.3 までは
- mode-table
- vi-copy, emacs-copy —— コピーモード
- vi-edit, emacs-edit —— コマンド入力モード
- vi-choice, emacs-choice —— 選択モード(
list-windows
とか)
- key-table
- root —— prefix(デフォルトでは
<C-B>
)無しで打ったときのモード - prefix —— prefix 付きで打ったときのモード
- root —— prefix(デフォルトでは
これだけあったのが、2.4 だと
- key-table
- root
- prefix
- copy-mode
- copy-mode-vi
これだけ!だいぶすっきりしました。
今までは bind-key
コマンドで -c
, -t
, -T
を組み合わせて設定してたことが -T
だけで良くなったのです。
# v で範囲指定スタート
bind-key -t vi-copy v begin-selection
# v で範囲指定スタート
bind-key -T copy-mode-vi v send-keys -X begin-selection
こんな感じ。コマンドがちょっと冗長になってしまいましたがしょうがない。
ただ、上でさらっと書いているのですが、*-edit
, *-choice
が消えています。CHANGES をもう一度よく読んでみると、
The emacs-edit, vi-edit, emacs-choose and vi-choose tables have been replaced by fixed key bindings in the command prompt and choose modes.
emacs-edit(以下略)はコマンド入力モードと選択モードで予め定義されたキーバインドに置き換えられました。
とのことなので、設定で変更不能になったんですかね。まあ、tmux vi-edit
とかでググっても全然ヒットしないので、誰も使ってなかったんでしょうか……。
設定ファイルで if 文が使えるようになった。
これは example_tmux.conf に例示されています。
# If running inside tmux ($TMUX is set), then change the status line to red
%if #{TMUX}
set -g status-bg red
%endif
環境変数 $TMUX
が定義されているときにステータスラインが赤色になります。#{...}
構文はステータスラインに使える変数がそのまま使えます(#{host}
とか)が、%if .. %endif
ブロックで使うなら例に挙げられているように環境変数で場合分けするのが便利そうです。
これに併せて、変数が特定の値と一致、不一致する場合についての演算子も追加されています。
# $HOGE が fuga なら真
%if #{==:#{HOGE},fuga}
# $HOGE が fuga でなければ真
%if #{!=:#{HOGE},fuga}
ただこれ……せっかくの新機能ですが、イマイチ使いどころが分かりません。よくある用途としては
上記記事のように OS によって設定を切り替える、というのが考えられるのですが、OS を判別する portable な方法としては uname
コマンドくらいしかありません。しかし今回追加された %if
ブロックは(基本的に)環境変数での分岐しか出来ないのです。
予め環境変数に uname
の結果を入れとけばいいのですが、だったら最初から if-shell
使うよね……。(´・ω・`)
マイナーな変更点
どうせだから、そのほかの修正点についても一行コメントで書いていきます。よくわからない、とか書いてる部分は原文を参考にしてください(そして教えてください><)。
互換性を失うもの
-
set-remain-on-exit
コマンドがなくなりました。代わりに hook で同じことができます。 - “before” hook がなくなりました。又、一部のコマンドだけが “after” hook を持つようになりました。他に、いくつか追加された hook もあります。
- → hook は使ってないのでよくわかりません……。
-
xterm-keys
オプションはデフォルトで ON になりました。
その他の改良点
- マウスのダブルクリック・トリプルクリックをサポートしました。
- BCE (Background Colour Erase) をサポートしました。
- → これのための対応が必要なくなったのかな。
- コピーモードでの検索中、ヒットした全ての文字列がハイライトされるようになりました。又、ヒットした数も表示されます。デフォルトの emacs キーバインドのとき、ハイライトは対話的に更新されます(所謂インクリメンタルサーチ)。
-
source-file
コマンドに glob パターンが使えるようになりました。 - ステータスラインで使える変数が増えました。
#{version}
#{client_termtype}
#{client_name}
#{client_written}
-
detach-client
に-E
オプションが付きました。クライアントが終了する代わりに別のコマンドを実行出来ます。- → この PR によるものですが、正直用途がニッチすぎてよくわからない。
- 各コマンドに独自の別名を設定できるようになりました。
別名=コマンド
の形で設定できます。これは不明なコマンドがパースされたときに利用されます。- →
command-alias
というオプションのことみたいです。
- →
-
break-pane
コマンド実行時に-n
オプションを使うことで、新しく作成されるウィンドウに名前を設定できるようになりました。 - OSC 52 をサポートするようになったので tmux 内部のプログラムが tmux のバッファーをセットできるようになりました。
- → 何のこっちゃ。
- マウスの “all event” モード(1003)がサポートされるようになりました。
- → よくわからない……。
- Strikethrough(打ち消し線)がサポートされました。
- → iTerm2 ではまだ対応していません。
- session group に
-t
オプションで名前が付けられるようになりました。 -
terminal-overrides
とupdate-environment
オプションは配列で指定するようになりました(以前のset -ag
構文も変更無しで動きます)。 - その他、たくさんのパフォーマンス改良点があります。