TERMをtmux-256colorにする
なぜやるのか
かねてよりmacOSが重くなることに困っていて、 macでtmuxとvimを使うとvimがすごく重くなる を見つけました。
結果論としては「これがパフォーマンスをよくする」というわけではなさそうでしたが、 とりあえずtmuxを使っているので、揃えることにしました。
前提知識
そもそもTERM環境変数とは何か
$TERM
は、ncursesなどが使っている terminfoライブラリ
の動作に影響する環境変数です。
この変数で「なんの端末を使っているか」を設定し、terminfoライブラリがそれに応じて出力を変えているため、
cursesを使用する開発者は端末の差をあまり考えずに様々な端末に対応したソフトウェアを書くことができるのです。
(エスケープシーケンスとか決めている)
実は端末エミュレーター(とそもそもの端末)には色々な種類があります。有名どころだと
xterm
, cygwin
, guru
, vtシリーズ
などでしょうか
筆者もそこまで詳しくないですが、途方もない数の仕様の端末が存在しています。
それらを共通のインターフェースで扱えるようにするのが terminfo
,
そして「今使っている端末」を設定するのが TERM
環境変数、ということです。
ちなみに余談ですが、=terminfo= で使用されるデータはmacの場合、
/usr/share/terminfo
に格納されています。
terminfoエントリ
terminfoエントリは、
手順
tmux.confで、tmux内でのTERMを設定する
前出のリンクで説明されているように、
以下を ~/. tmux.conf
(または使っているtmux.confファイル)に追加します
terminfoエントリーを追加する
筆者の環境(macOS+homebrew)では、terminfoエントリーがないと怒られてしまいエスケープシーケンスが全く使えなくなりました。
しかし、実はhomebrewもきちんとterminfoエントリーを作成してくれています。
/usr/local/opt/ncurses/bin/infocmp
には作成されたエントリーが保存されているのですが、ここは残念ながら参照されません。
そこで、tmuxのissueにあった方法
で /usr/bin/infocmp
に追加します
$ brew install ncurses
$ /usr/local/opt/ncurses/bin/infocmp tmux-256color > ~/tmux-256color.info
$ tic -xe tmux-256color tmux-256color.info
# This creates a complied entry in ~/.terminfo
$ infocmp tmux-256color | head
# Reconstructed via infocmp from file:
# /Users/libin/.terminfo/74/tmux-256color
tmux-256color|tmux with 256 colors,