Claude CodeをZellijで使うと入力できない — スクロール後の切り分け
Zellijでスクロールバックを遡ったあと、戻るキーが効かなくなるという報告がclaude-codeのissueにあります。原因は未確定のため、報告の中身とZellij側の仕様、切り分けの順番をまとめます。
Zellij上のClaude Codeで、スクロールバックを遡ったあとに入力行へ戻れなくなる。そんな報告がclaude-codeのissue #101238に上がっています。原因はまだ分かっておらず、issueはopenのままです。ここでは報告の中身、Zellij側の仕様、手元で切り分ける順番をまとめます。
報告されている症状は「別タブの通常シェル」で出る
issueの報告者は、Linux上のfootターミナルでZellijを使い、Claude Code v2.1.292をフルスクリーン表示で動かしています。タイトルは「Zellij integration: scrollback navigation breaks terminal input in Claude Code tab」です。
本文は短く、書かれている内容は次の3点に絞られます。
- Zellijとフルスクリーン表示のClaude Codeの組み合わせで、挙動がおかしい
- 症状は「別のタブ」で出る。通常のシェルでターミナルを上にスクロールして過去の出力を見ると、下の入力行に戻るためのキーが効かない
- ラベルは
bug、platform:linux、area:tui
注意したいのは、壊れているのがClaude Codeを動かしているタブではなく、通常シェルのタブだと読める点です。タイトルの「Claude Code tab」と本文の「other tab」は食い違っていて、どのタブで何が起きたのかは報告者に聞かないと確定しません。
コメントは1件です。再現条件を絞るための比較実験が提案されていますが、原因の特定には至っていません。
報告から言えることと言えないこと
- 言える: 特定の環境(Linux・foot・Zellij・v2.1.292)で、スクロール後に戻るキーが効かなくなった報告がある
- 言えない: Claude Codeが原因か、Zellijが原因か、その組み合わせだけで起きるのか
- 言えない: 他の環境で再現するか。再現手順や修正バージョンはissueに書かれていない
Zellijのscrollモードは勝手に出入りする
Zellijの公式ドキュメントには、症状と関係しそうな仕様が書かれています。ただし、これが今回の原因だと示すものではありません。
Zellijには normal、locked、scroll、search など複数のモードがあります。scrollモードの扱いは次の通りです。
| 動作 | Zellijのドキュメントの記述 |
|---|---|
| scrollモードを抜けたとき | Zellijのドキュメントの記述ペインのスクロール位置は保たれる。自動で最下部に戻らない |
| スクロール済みのペインにフォーカスしたとき | Zellijのドキュメントの記述自動でscrollモードに入る |
| スクロールしていないペインにフォーカスしたとき | Zellijのドキュメントの記述normal モードに戻る |
| ペインをスクロールしたとき | Zellijのドキュメントの記述暗黙にscrollモードへ入り、抜ける |
| 暗黙の出入りを止めるには | Zellijのドキュメントの記述scroll_mode_sync オプションで切る |
最下部まで戻りつつ抜けるには、ScrollToBottom アクションを含むキーバインドが必要だとあります。つまり「上に遡ったペインは、最下部へ戻す操作をしない限り、スクロール済みの状態が残る」のがZellijの設計です。
通常シェルのタブで遡ったまま別タブへ移り、戻ってきたときにscrollモードのままだった。そう仮定すれば、戻るキーの扱いが普段と違って見えてもおかしくありません。あくまで仮定で、issueはこの経路を確認していません。
フルスクリーン表示は別の層でスクロールする
Claude Code側の事情も押さえておきます。フルスクリーン表示では、会話が端末のスクロールバックではなくオルタネートスクリーンバッファに置かれます。スクロールはClaude Codeが自前で処理します。
| 操作 | 動作 |
|---|---|
PgUp / PgDn | 動作半画面ずつスクロール |
Ctrl+Home | 動作会話の先頭へ |
Ctrl+End | 動作最新メッセージへ戻り、自動追従を再開 |
| マウスホイール | 動作数行ずつスクロール |
Zellijのスクロールバックと、Claude Codeの仮想スクロールは別物です。Claude Codeのタブで PgUp を押しても動くのはClaude Code側で、Zellijのscrollモードではありません。通常シェルのタブで遡るのはZellij側のスクロールバックです。報告の症状を見るときは、どちらの層でスクロールしたのかを分けて考える必要があります。
スクロールバックが消える・遡れないという別の不具合は、スクロールバックが消える原因と対処で扱っています。
Claude Codeの更新履歴には、v2.1.97に「NO_FLICKER モードをzellij内で動かしたときのスクロール描画の乱れを修正」という項目があります。ZellijとフルスクリーンのスクロールはClaude Code側でも過去に手が入った領域です。ただし、これは描画の乱れの修正であり、今回の入力不能とは別の項目です。
手元で切り分ける順番
issueのコメントが勧める比較を、実行しやすい形に並べ直します。キーの設定は変えずに、1回に1つだけ条件を動かします。
症状の出る条件を絞る
- 1
Claude Codeを使っていない状態で再現するか見る
新しいZellijセッションを開き、通常シェルのタブだけで、上へスクロールしてから最下部へ戻る操作を試します。ここで既に戻れないなら、Claude Codeは無関係です。
- 2
別タブでClaude Codeを開いたあと、もう一度試す
同じセッションの別タブでClaude Codeをフルスクリーンで起動してから、手順1の操作を繰り返します。起動の前後で結果が変わるかを見ます。
- 3
Zellijを使わず、端末直下で試す
Zellijの外、同じ端末の直下でClaude Codeを動かします。症状がZellijの中でしか出ないのかを確かめます。
- 4
何が効かなくなったかを書き分ける
「まだスクロール表示のまま」なのか、「入力行に戻ったのにキー入力が壊れている」のかを分けます。前者ならscrollモードのまま、後者なら別の問題の可能性があります。
記録しておくと報告に使える項目は、ZellijとfootまたはほかのターミナルのバージョンとClaude Codeのバージョン、スクロールに入った操作と出た操作、効かなくなったキーです。ログやコマンドの出力を貼るときは、ホームのパスやユーザー名を伏せます。
Zellijのスクロールで会話を読みたいときは[を使う
フルスクリーン表示の会話は、Zellijのスクロールバックには載りません。Zellijのscrollモードで遡っても、見えるのはClaude Codeが起動する前のシェルの出力までです。
会話を端末側で扱いたいときは、Ctrl+o でトランスクリプトモードに入り、[ を押します。会話全体が、ツール出力を展開した状態で端末のネイティブなスクロールバックへ書き出されます。Zellijのscrollモードや検索で遡れるようになり、Esc か q で抜けるとフルスクリーン表示に戻ります。長いセッションでは、書き出しの間に少し止まることがあります。
この操作はZellijのスクロール状態とClaude Codeの画面が同時に絡む場面です。報告の症状を再現する手順に含めるなら、[ を押したか、押した後にどう抜けたかも記録しておくと、原因の候補を絞れます。
作業中のセッションを壊さずに戻す
コメントは、戻せるかを試すときにセッションを再起動したり、作業中のプロセスを落としたりしない方法を勧めています。Zellijにはscrollモードを抜けるアクションがあるので、まずそれを使います。
最下部へ戻ってscrollモードを抜けるバインドは、設定ファイルで次のように書けます。これはZellijのアクション名を使った例で、キーの割り当ては任意です。
keybinds {
scroll {
bind "G" { ScrollToBottom; SwitchToMode "normal"; }
}
}ScrollToBottom はペインを最下部までスクロールするアクション、SwitchToMode "normal" はnormalモードへ戻すアクションです。
暗黙の出入りが原因かを調べたいときは、scroll_mode_sync オプションを切って挙動が変わるかを試します。切ると、scrollモードには明示的なキーバインドでしか入れなくなります。
Zellijでフルスクリーン表示を避けて回避する
原因が分からないうちの緩和策としては、Claude Code側のレンダラーを変える方法があります。クラシック表示はオルタネートスクリーンを使わず、会話を端末のネイティブなスクロールバックに置きます。
CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN=1 claudeセッションの中から切り替えるなら /tui default です。この設定は settings.json の tui キーに保存され、CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN=1 は tui 設定やフルスクリーンを指定する環境変数より優先されます。
ただし、クラシック表示に切り替えて症状が消えたとしても、原因がフルスクリーンにあると決まるわけではありません。issueの症状は通常シェルのタブで出ているためです。切り替えは「Claude Codeの描画方式が症状に絡んでいるか」を見る比較としても使えます。
tmuxでは公式のフルスクリーン表示の注意点が整理されています。Zellijから乗り換える場合はtmuxの設定手順が参考になります。Zellijで使うときに別の制約があるAgent Teamsは、ZellijとAgent Teamsの記事にまとめています。
報告に添えると進みやすい情報
issueはopenで、再現手順も修正バージョンもありません。同じ症状に遭遇したら、次の情報を揃えて同じissueに追記すると、原因の切り分けが進みます。
- ZellijとターミナルエミュレーターとClaude Codeのバージョン
- 手順1〜3のどこで再現し、どこで再現しなかったか
- 効かなくなったキーと、画面に出ていたモード表示
- scrollモードを抜けるアクションを試した結果
手元で同じ症状が出たら、まずどの層でスクロールしたのかを確かめてください。Zellijのscrollモードなのか、Claude Codeのフルスクリーン表示なのかで、見る場所が変わります。