Claude Media
Claude CodeをZellijで使うと入力できない — スクロール後の切り分け

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. 1

    Claude Codeを使っていない状態で再現するか見る

    新しいZellijセッションを開き、通常シェルのタブだけで、上へスクロールしてから最下部へ戻る操作を試します。ここで既に戻れないなら、Claude Codeは無関係です。

  2. 2

    別タブでClaude Codeを開いたあと、もう一度試す

    同じセッションの別タブでClaude Codeをフルスクリーンで起動してから、手順1の操作を繰り返します。起動の前後で結果が変わるかを見ます。

  3. 3

    Zellijを使わず、端末直下で試す

    Zellijの外、同じ端末の直下でClaude Codeを動かします。症状がZellijの中でしか出ないのかを確かめます。

  4. 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のフルスクリーン表示なのかで、見る場所が変わります。

この記事を共有:XはてブLinkedIn