tmuxで選択範囲をbatでシンタックスハイライト表示させる備忘録
最近OpenAIのCodex CLIを使い始めました。表示してくれるコードに色が付いていないため、個人的には見づらいです。

issueなどは立っていますし、シンタックスハイライトはいずれ対応されそうな機能だと思います。が、ここではtmuxを使って力技でなんとかしました。肝心の差分表示の部分ではまだ対応できてませんが、まぁtmuxのコマンドを組み合わせて使ういい例になったので備忘録として残しておきます。
※この記事はバージョン3.5a
のtmuxに基づいて書いています。
対応
「コピーモードの選択範囲」をハイライト付きでpopup表示するキーバインドです。
bind-key -N "cmode: 選択範囲を言語指定してbatで表示" -T copy-mode-vi b { command-prompt -p 'language:' \ -I "md" \ "send-keys -X copy-pipe-no-clear '\ tmux load-buffer -; \ tmux display-popup -w 95% -h 90% -E \ \"tmux show-buffer | bat --paging=always -l=%%\" ' "}
解説
tmuxの設定ファイルの書き方やコピーモードは別の記事に書いていますので「知らないぞ」って人は先にどうぞ。
command-prompt
command-prompt
を使い、bat
に渡す言語を指定します。
command-prompt -p "プロンプト" -I "初期値" "<command>"
ここで入力した内容は<command>
の%%
に埋め込まれます。
command-prompt -p 'language:' \ -I "md" \ "send-keys -X copy-pipe-no-clear '\ tmux load-buffer -; \ tmux display-popup -w 95% -h 90% -E \ \"tmux show-buffer | bat --paging=always -l=%%\" ' "
send-keys
send-keys -X <command>
でコピーモード中にコマンドを実行できます。
send-keys -X copy-pipe-no-clear '\ tmux load-buffer -; \ tmux display-popup -w 95% -h 90% -E \ \"tmux show-buffer | bat --paging=always -l=%%\" '
copy-pipe-no-clear
copy-pipe
で選択範囲を次のコマンドに標準入力として渡せます。今回は選択範囲をクリアしないバージョンのcopy-pipe-no-clear
を使っています。
言語指定でtypoしたときにもう一度すぐ実行できるようにするためです。
buffer系
load-buffer -
で標準入力をバッファに入れています。show-buffer
でバッファを吐き出してます。
display-popup
ポップアップです。batを使ってシンタックスハイライトしています。
tmux display-popup -w 95% -h 90% -E \ \"tmux show-buffer | bat --paging=always -l=%%\"

一時的にCodexのために作ったキーバインドですが、もしAIエージェントCLI以外で役に立つ場面があれば追記します。