Codex CLIを使っていて、「さっきの応答をもう一度読み返したい」と思ったことはないでしょうか。
↑キーを押したら過去の応答ではなく自分のプロンプトが戻ってきて、「あれ?」となった経験があるかもしれません。
私もまったく同じ状況に陥りました。
原因はCodex CLIではなく、tmuxの仕組みにありました。
1
1. 何が起きていたのか
私の接続構成はこうなっています。
WezTerm → ssh → tmux → Codex CLI
この構成で↑キーを押すと、Codexの過去の応答ではなく、シェルの入力履歴が表示されます。
↑キーはシェルが管理している「自分が過去に打ったコマンド」を呼び出す操作で、Codexの応答とは無関係です。
「Codexの応答を遡れた気がする」という瞬間もありました。
これはtmuxのコピーモードに偶然入っていたためです。
1.1. 3つの「履歴」が混在している
ターミナル周りには、独立した履歴が3つあります。
WezTermのスクロールバックは、端末エミュレータが画面に出力したテキストをそのまま保存したものです。
tmuxを使っていない環境ではマウスホイールで遡れます。
2
tmuxの内部履歴は、tmuxが独自に持つバッファです。
コピーモードに入ると、ここを自由にスクロールできます。
3
シェルの入力履歴は、bashやzshが管理するもので、↑キーで呼び出せます。
自分が過去に入力したコマンドのみが対象で、Codexの応答は含まれません。
4
↑キーを押したときに出てきたのは3番目、つまりシェルの入力履歴でした。
Codexの応答を遡るには2番目、tmuxの内部履歴にアクセスする必要があります。
2. コピーモードの使い方
tmuxのコピーモードは、tmuxが画面制御を引き受けて履歴をスクロールできるようにするモードです。
通常時はキー入力がそのままアプリに送られますが、コピーモード中はtmuxがキーを解釈します。
| 操作 | キー |
|---|---|
| コピーモードに入る | Ctrl+b [ |
| 抜ける | q |
| 上にスクロール | ↑ または PageUp |
| 下にスクロール | ↓ または PageDown |
Ctrl+b はtmuxのプレフィックスキーで、tmuxへの命令はすべてここから始まります。
5
viキーバインドを有効にすると、k と j で上下移動、Ctrl+u と Ctrl+d で半ページ移動、/ で検索もできます。~/.config/tmux/tmux.conf に以下を追記すると有効になります。
6
set -g mode-keys viCode language: JavaScript (javascript)
3. まとめ
- ↑キーで出てくるのはシェルの入力履歴で、Codexの応答ではない
- Codexの過去の応答を読み返すには
Ctrl+b [でコピーモードに入る - 読み終わったら
qで通常モードに戻る
tmuxを使っているとキー入力を「誰が処理しているか」が状況によって変わります。
コピーモードの存在を知っておくだけで、作業中の「あれ?」がかなり減ります。
- Codex CLIはOpenAIが提供するオープンソースのコーディングエージェントです。ローカルのターミナルから直接コードの読み取り・変更・実行を行えます。 – Codex CLI Overview
- WezTermはRustで実装されたGPUアクセラレーション対応のクロスプラットフォームターミナルエミュレータです。スクロールバック履歴の検索機能も内蔵しています。 – WezTerm – Wez’s Terminal Emulator
- tmuxの履歴バッファのデフォルトは2000行です。長い出力が必要な場合は
set -g history-limit 10000のように~/.config/tmux/tmux.confで増やせます。 – Advanced Use · tmux/tmux Wiki - シェルの入力履歴はGNU Readlineが管理しています。bashでは
HISTSIZEで件数を、HISTFILEで保存先を制御できます。zshではHISTFILEとSAVEHISTが対応する変数です。 – Comparison of command shells – Wikipedia - プレフィックスキーは変更可能です。
Ctrl+aに変更したい場合はset -g prefix C-aとunbind C-bを設定ファイルに追記します。 – tmux cheatsheet - コピーモードでの検索はviモードでは
/(下方向)と?(上方向)、EmacsモードではCtrl+s(下方向)とCtrl+r(上方向)です。 – tmux in practice: scrollback buffer