case_1041

Claude Codeのターミナル設定7手順|改行・通知・tmux

Claude Codeのターミナル設定7手順|改行・通知・tmux

Claude Codeのターミナル設定を7手順で整理。Shift+Enterの改行、macOSのOptionキー、終了通知とベル、tmuxの3行、Windowsのバックスペース、ちらつきの止め方を公式情報で確認。

2026年9月27日時点の結論。Claude Codeはどのターミナルでも設定なしで動く。だから「ターミナル設定」は全部やるものではなく、症状が出た所だけ直すものだ。改行が入らないなら Ctrl+J か \ を打ってからEnter、それでもShift+Enterで入れたいなら /terminal-setup を1回。終わったのに気付けないなら preferredNotifChannel を "terminal_bell" にする。tmuxの中なら ~/.tmux.conf に3行足す。画面がちらつくなら /tui fullscreen。Windowsでバックスペースが単語ごと消えるなら CLAUDE_CODE_BS_AS_CTRL_BACKSPACE=0。ここまでで実務の相談はほぼ終わる。

公式ドキュメントも「Claude Codeは設定なしでどのターミナルでも動く。このページは何かが期待どおりに動かない時のためのものだ」と明言している(Anthropic「Terminal configuration」(2026年9月確認))。順に全部設定する必要はない。

この記事の要点

  • 改行:Enterは送信。改行は Ctrl+J、または \ を打ってからEnter。この2つはどのターミナルでも設定なしで動く。
  • Shift+Enter:ターミナルによって扱いが3段階に分かれる。そのまま動くもの、/terminal-setup を1回走らせるもの、使えないもの。
  • Optionキー:macOSのほとんどのターミナルは既定でOptionを修飾キーとして送らない。「Use Option as Meta Key」相当の設定を入れるまでOption+Enterなどは効かない。
  • 通知:既定でデスクトップ通知が出るのはGhostty、Kitty、iTerm2だけ。それ以外は preferredNotifChannel を "terminal_bell" にするか、Notificationフックを使う。
  • tmux:allow-passthrough と拡張キーの3行が入るまで、Shift+Enterも通知も進捗バーも外側に届かない。
  • ちらつき:/tui fullscreen に切り替える。ちらつきだけなら CLAUDE_CODE_FORCE_SYNC_OUTPUT=1 で足りることがある。
  • 対象読者:Claude CodeをターミナルのCLIで常用している開発者、チームの端末設定を揃える開発リード。
  • 今日やること:いま使っているターミナルで Ctrl+J を押して改行が入るか確かめる。入るなら改行の問題はそこで終わる。入らない、あるいはShift+Enterで入れたいなら手順1へ進む。

前提|症状から引く

このページは網羅ではなく索引として使う。自分に出ている症状から入る。

中央のターミナル設定を囲むように、Shift+Enter・Optionキー・通知・tmux・バックスペース・ちらつきの6症状を配置した図
ターミナル設定を症状から引く索引
症状 見る手順
Shift+Enterで改行が入らず送信される 手順1
macOSでOptionキーのショートカットが何も起きない 手順2
終わっても音も通知も出ない 手順3
tmuxの中で通知と進捗が届かない 手順4
Windowsでバックスペースが単語ごと消える 手順5
画面がちらつく、スクロール位置が飛ぶ 手順6
色が合わない、Vimキーで編集したい 手順7

ここはターミナル側が正しい信号をClaude Codeに送るようにする話だ。Claude Code自身がどのキーに反応するかを変えたい場合は、キーバインドの設定が別にある(Anthropic「Customize keyboard shortcuts」(2026年9月確認))。

手順1|改行を入れる

Enterを押すとメッセージが送信される。送信せずに改行を入れる方法は2つあり、どちらも設定不要でどのターミナルでも動く。Ctrl+J を押すか、バックスラッシュ(\)を打ってからEnterを押す。

Shift+Enterが設定なしで動く層、/terminal-setupが必要な層、使えない層の3段に分け、常に使えるCtrl+Jとバックスラッシュを左に添えた図
Shift+Enterの対応が3段階に分かれる

Shift+Enterの対応はターミナル次第

多くのターミナルではShift+Enterでも入るが、対応はターミナルエミュレータによって分かれる。

ターミナル Shift+Enterでの改行
Ghostty、Kitty、iTerm2、WezTerm、Warp、Apple Terminal、Windows Terminal 設定なしで動く
kittyキーボードプロトコルに対応する他のターミナル(footやAlacritty 0.16以降など) 設定なしで動く。Claude Code v2.1.269以降が必要
VS Code、Cursor、Devin Desktop、0.16より前のAlacritty、Zed /terminal-setup を1回実行する
gnome-terminal、PyCharmやAndroid StudioなどのJetBrains IDE 使えない。Ctrl+J か \ とEnterを使う

kittyキーボードプロトコルに答えるターミナルへの対応は2.1.269で入った(anthropics/claude-code「CHANGELOG.md」2.1.269(2026年9月27日確認))。

/terminal-setupが実際に書き換えるもの

VS Code、Cursor、Devin Desktop、0.16より前のAlacritty、Zedでは、/terminal-setup がターミナルの設定ファイルにShift+Enterのキーバインドを書き込む。初回は Installed VSCode terminal Shift+Enter key binding のような確認メッセージが出る。既存のバインドはそのまま残され、VSCode terminal Shift+Enter key binding already configured のようなメッセージが出た場合は何も変えていない。

実行はホストのターミナルで直接行う。tmuxやscreenの中から走らせないこと。ホストターミナルの設定ファイルに書き込む必要があるためだ。

VS Code、Cursor、Devin Desktopでは、/terminal-setup はエディタ設定も2つ変える。統合ターミナルの文字化けを防ぐために terminal.integrated.gpuAcceleration を "off" にし、フルスクリーンモードでのスクロールを滑らかにするために terminal.integrated.mouseWheelScrollSensitivity を設定する。GPUアクセラレーションの変更を戻したい場合は "auto" に戻してエディタのウィンドウを再読み込みする。この設定項目そのものはVS Code側のドキュメントにある(Microsoft「Terminal Appearance」terminal.integrated.gpuAcceleration(2026年9月確認))。IDE統合そのものの話はClaude CodeのIDE統合(VS Code・JetBrains)にまとめてある。

Zedでは keymap.json をその場で更新する。既存のバインドがあってTerminalの shift-enter が含まれていない場合は、まず同じディレクトリに keymap.json.1a2b3c4d.bak のようなコピーを取ってから、他のキーバインドとコメントを保ったままShift+Enterのバインドをマージする。keymapを読めない、解析できない、バックアップできない、マージ結果を検証できないいずれかの場合は、ファイルを変更せず、自分で追加すべきキーバインドのブロックを表示する。Zedの keymap.json を丸ごと上書きしてしまう不具合は2.1.247で修正されている。

tmuxの中で動かしている場合、外側のターミナルがShift+Enterに対応していても、後述のtmux設定が別途必要になる。

なお、改行を別のキーに割り当てたい、あるいはEnterで改行してShift+Enterで送信する形に入れ替えたい場合は、キーバインドファイルで chat:newline と chat:submit のアクションを割り当てる。

手順2|macOSでOptionキーを効かせる

Claude CodeのショートカットのいくつかはOptionキーを使う。改行のOption+Enter、モデル切り替えのOption+Pなどだ。macOSではほとんどのターミナルが既定でOptionを修飾キーとして送らないため、有効にするまでこれらのショートカットは何も起きない。

ターミナルごとの設定場所

この設定はたいてい「Use Option as Meta Key」と表示されている。MetaはいまOptionやAltと書かれているキーの、歴史的なUnixでの呼び名だ。

ターミナル 設定場所
Apple Terminal Settings → Profiles → Keyboard の「Use Option as Meta Key」をチェック
iTerm2 Settings → Profiles → Keys → General で Left Option key と Right Option key を「Esc+」にする
VS Code 設定に "terminal.integrated.macOptionIsMeta": true を追加
Ghostty、Kitty、その他 設定ファイルの Option-as-Alt または Option-as-Meta 相当の項目を探す

初回セットアップを承認していた場合

Claude Codeの初回起動時のターミナルセットアップのプロンプトを承認していれば、Apple Terminalではこれは済んでいる。そのプロンプトは /terminal-setup を実行し、Optionをメタキーとして有効にし、あわせてApple Terminalのプロファイルの可聴ベルをオフにする。

スクリーンリーダーモードでは、/terminal-setup はベルの設定を変えずターミナルベルが鳴るままにする。v2.1.211より前は、スクリーンリーダーモードでもベルをオフにしていた。過去の実行でベルが切られてしまっている場合は、Settings → Profiles → Advanced の「Audible bell」で戻す。

iTerm2で /terminal-setup を実行すると、Settings → General → Selection の「Applications in terminal may access clipboard」も有効になり、/copy コマンドがシステムのクリップボードに書けるようになる。このコマンドはtmuxの中から実行してもiTerm2を検出する。変更を反映するにはiTerm2を再起動する。

手順3|終わったら音か通知で呼ばせる

長いタスクを回している間に他の作業へ移れるかどうかは、ここで決まる。Claudeがタスクを終えた時、あるいは権限プロンプトで止まった時に、あなたがターミナルから離れていると判断されると通知イベントが発火する。

通知イベントからデスクトップ通知、preferredNotifChannelによるターミナルベル、Notificationフックの3つの出口へ分かれる流れを示した図
通知イベントから鳴らし方を選ぶ流れ

既定でデスクトップ通知が出るのはGhostty、Kitty、iTerm2だけだ。それ以外のターミナルでは、preferredNotifChannel を "terminal_bell" にしてターミナルベルを鳴らすか、Notificationフックで独自の音やコマンドを設定する。

{
  "preferredNotifChannel": "terminal_bell"
}

SSH越しでもデスクトップ通知は届く

デスクトップ通知はSSH越しでもローカルのマシンに届くので、リモートのセッションでも呼び出せる。GhosttyとKittyは追加設定なしでOSの通知センターへ転送する。iTerm2は転送を明示的に有効にする必要がある。

  1. Settings → Profiles → Terminal を開く
  2. 「Notification Center Alerts」をチェックし、「Filter Alerts」をクリックして「Send escape sequence-generated alerts」を有効にする

それでも通知が出ない場合は、ターミナルアプリにOS設定で通知の権限があるかを確認する。tmuxの中で動かしているなら、次の手順のパススルーが必要だ。

音を鳴らすNotificationフック

どのターミナルでも、Notificationフックで音を鳴らしたり任意のコマンドを走らせたりできる。フックは組み込みの通知を置き換えるのではなく並んで動くので、WarpやVS Codeの統合ターミナルのようにデスクトップ通知が届かないターミナルでも使える。

{
  "hooks": {
    "Notification": [
      {
        "hooks": [{ "type": "command", "command": "afplay /System/Library/Sounds/Glass.aiff" }]
      }
    ]
  }
}

上はmacOSでシステム音を鳴らす例だ。Linux・Windows向けのデスクトップ通知コマンドはAnthropicの「Hooks reference」にある。フックの設計そのものはClaude Code Hooks実践ガイドで扱った。スマホ側で受け取る手段はClaude Codeのスマホ操作(Remote Control)が近い。

手順4|tmuxに3行足す

tmuxの中でClaude Codeを動かすと、既定ではShift+Enterが改行ではなく送信になり、デスクトップ通知と進捗バーが外側のターミナルに届かない。~/.tmux.conf に次の3行を足す。

Claude Codeからの通知と進捗がtmuxの層を通り抜けて外側のターミナルへ届く構図と、allow-passthroughおよびextended-keysの位置を示した図
tmuxを通り抜けて外側のターミナルへ届かせる
set -g allow-passthrough on
set -s extended-keys on
set -as terminal-features 'xterm*:extkeys'

書いたら、動いているtmuxサーバーに反映する。

tmux source-file ~/.tmux.conf

allow-passthrough の行は、通知と進捗の更新をtmuxに飲み込ませずに外側のターミナルへ届かせる。extended-keys の2行は、tmuxがShift+Enterと素のEnterを区別できるようにして、改行のショートカットを動かす。tmuxの設定項目そのものはtmux「tmux wiki」(2026年9月確認)が一次情報になる。

同期出力とtmuxのバージョン

ちらつき対策としてtmux 3.4以降で同期出力を有効にする変更が2.1.200で入ったが、2.1.212のリリースノートでこれは訂正されている。訂正後の記述は「tmuxは3.6系まで同期出力を備えておらず、対応する新しいtmuxは自動で検出される」だ。手元のtmuxが3.6系以下なら、ちらつきはtmux側の同期出力では解決しない。手順6のレンダラ切り替えを使う。

手順5|Windowsでバックスペースが単語ごと消えるのを直す

Windowsでは、^H として届くバックスペースをClaude CodeはCtrl+Backspaceとして読み、直前の単語を削除する。例外は TERM_PROGRAM が mintty の場合と TERM が cygwin の場合だ。macOSとLinuxでは素のバックスペースとして読む。

環境変数で読み方を反転させる

バックスペースを押すたびに単語がまるごと消えるなら、そのターミナルは素のバックスペースとして ^H を送っている。次の環境変数を設定する。

CLAUDE_CODE_BS_AS_CTRL_BACKSPACE=0

これでバックスペースとCtrl+Hはどちらも1文字ずつ消すようになる。逆に、macOSやLinuxでターミナルがCtrl+Backspaceに ^H を送るために1文字しか消えない場合は、同じ変数を 1 にする。Windows側の環境構築全体はClaude CodeのWindows・WSL2セットアップにまとめてある。

手順6|ちらつきとスクロール飛びを止める

Claudeが作業している間に表示がちらつく、スクロール位置が飛ぶ、という症状は、レンダラを切り替えると止まる。

既定の描画で起きるちらつきとスクロール飛びを左に置き、右のフルスクリーンへ切り替える構図と代替の環境変数を下に添えた図
既定の描画とフルスクリーンの切り替え先
/tui fullscreen

このモードでは、ターミナル本来のスクロールバックではなく、Claude Codeの中でマウスやPageUpを使ってスクロールする。会話はそのまま引き継がれて再起動し、以後のセッションもフルスクリーンで始まる。環境変数でも指定できる。

CLAUDE_CODE_NO_FLICKER=1 claude

PowerShellなら次の形になる。

$env:CLAUDE_CODE_NO_FLICKER="1"; claude

settings.json の env に入れて固定することもできる。

{
  "env": {
    "CLAUDE_CODE_NO_FLICKER": "1"
  }
}

レンダラを変えずにちらつきだけ止める

問題がちらつきだけで、ターミナルが同期出力に対応しているのに自動検出されていない場合(Emacsの eat など)は、レンダラを変えずに CLAUDE_CODE_FORCE_SYNC_OUTPUT=1 を設定すればちらつきが止まる。フルスクリーンでの検索やコピーの作法はAnthropicの「Fullscreen rendering」にまとまっている。

スクリーンリーダーモードではこの節は当てはまらない。Claude Codeは常にプレーンなスクロールテキストとして描画し(アタッチしたバックグラウンドセッションを除く)、他のセッションで /tui fullscreen を実行すると切り替えの代わりに説明が表示される。

横幅が広すぎて読みにくい場合

広いターミナルではClaudeの応答の各行がウィンドウの幅いっぱいまで伸びる。決めた桁数で折り返したいなら maxProseWidth を設定する。この設定は2.1.282で追加された。表とコードブロックは幅いっぱいのまま保たれる。

手順7|テーマとVimモードを合わせる

見た目とキー操作の最後の調整だ。テーマは /theme コマンド、または /config のテーマピッカーで選ぶ。autoを選ぶとターミナルの明暗を検出するので、ターミナルがOSの外観変更に追従する限りテーマも追従する。Claude Codeはターミナル自身のカラースキームを制御しないので、そこはターミナルアプリ側で設定する。

自作テーマの置き場

/theme は組み込みプリセットに加えて、自分が定義したカスタムテーマと、インストール済みプラグインが提供するテーマを一覧に出す。一覧の末尾の New custom theme… を選ぶと対話的に作れる。カスタムテーマが選択された状態で Ctrl+E を押すと編集できる。

カスタムテーマは ~/.claude/themes/ に置くJSONファイルだ。拡張子を除いたファイル名がテーマのスラッグになり、選択すると設定には custom:<slug> が保存される。

フィールド 中身
name /theme に出る表示名。既定はファイル名のスラッグ
base 元にする組み込みプリセット。dark、light、dark-daltonized、light-daltonized、dark-ansi、light-ansi のいずれか。既定は dark
overrides 色トークン名から色値へのマップ。ここに無いトークンはベースのプリセットに従う
{
  "name": "Dracula",
  "base": "dark",
  "overrides": {
    "claude": "#bd93f9",
    "error": "#ff5555",
    "success": "#50fa7b"
  }
}

色値は #rrggbb、#rgb、rgb(r,g,b)、ansi256(n)、ansi:<name> を受け付ける。<name> は red や cyanBright のような16の標準ANSI色名だ。未知のトークンと不正な色値は無視されるので、打ち間違いで表示が壊れることはない。

Claude Codeは ~/.claude/themes/ を監視してファイルの追加・変更で再読み込みするため、エディタでの編集が動いているセッションに再起動なしで反映される。ただし起動時に ~/.claude/themes/ フォルダ自体が存在しなかった場合は、最初のテーマファイルを作ったあとに1回だけ再起動が必要だ。日本語表示まわりの設定はClaude Codeの日本語設定にまとめてある。

プロンプトをVimキーで編集する

プロンプト入力にはVim風の編集モードがある。/config → Editor mode、または ~/.claude/settings.json の editorMode を "vim" にして有効にする。戻す時はEditor modeを normal に戻す。

対応しているのはNORMALモードとVISUALモードのモーションと演算子の一部だ。hjkl の移動、v / V の選択、テキストオブジェクトを伴う d / c / y などが使える。Vimのモーションはキーバインドファイルでは再割り当てできない。jj のようなINSERTモードの2キーの並びをEscapeに割り当てたい場合は、ユーザー設定の vimInsertModeRemaps を使う。

素のVimと違い、INSERTモードでもEnterはプロンプトを送信する。改行を入れたい時はNORMALモードで o か O、あるいは Ctrl+J を使う。settings.json の全体像は本サイトのsettings.json設定完全ガイドにある。

大きな貼り付けの扱い

800文字を超える、または3行を超える内容をプロンプトに貼ると、Claude Codeは入力欄を使える状態に保つために [Pasted text #1 +120 lines] のようなプレースホルダに畳む。送信時には全文が送られる。

大きい入力はファイル経由にする

ファイル全体や長いログのような非常に大きい入力は、貼るのではなくファイルに書いてClaudeに読ませるほうがよい。会話のトランスクリプトが読める状態のまま保たれ、以後のターンでもClaudeがパスで参照できる。VS Codeの統合ターミナルは、非常に大きな貼り付けでClaude Codeに届く前に文字を落とすことがあるので、そこでは特にファイル経由にする。画像を渡す場合の扱いはClaude Codeに画像を渡す3つの方法で扱った。

貼り付けに不可視のUnicode文字が含まれていた場合、Claude CodeはEnterを押した時にそれを取り除き、きれいにしたプロンプトを入力欄に戻す。もう一度Enterを押して送る。

プレースホルダを消してしまった時

Ctrl+W や Ctrl+K のような単語・行単位の削除、あるいは df] のような f / t モーションを伴うVimの削除で、削除範囲が [Pasted text #N] のプレースホルダの内側に届くと、Claude Codeはプレースホルダをまるごと取り除く。戻すには、単語・行単位の削除のあとなら Ctrl+Y で貼り戻し、Vimの削除のあとならNORMALモードで p を使う。

貼り付けの中身は ~/.claude/paste-cache/ に保持されるので、コマンド履歴からプロンプトを呼び出して再送信すると、後のセッションでも全文が再送される。ただしキャッシュファイルは cleanupPeriodDays の保持期間の掃除で削除されるため、呼び出したプロンプトが既に無い貼り付けを参照していることもある。その場合、Claude Codeは [Pasted text #N] という文字列そのものを送ることはなく、欠けている貼り付けを名指しした通知を出す。本文が残っている普通のプロンプトではプレースホルダを取り除いて残りを送り、シェルモードのコマンドや / コマンドのように取り除くと実行内容が変わる場合、および取り除くと空になる場合は送信を取り消して入力欄に元のテキストを残す。

よくある失敗と対処

改行とキーの失敗

❌ JetBrains IDEのターミナルで /terminal-setup を何度も走らせた
⭕ gnome-terminalとJetBrains IDEはShift+Enterに対応していない。Ctrl+J か \ とEnterを使う。

❌ tmuxの中から /terminal-setup を実行した
⭕ ホストターミナルの設定ファイルに書き込むコマンドなので、ホストのターミナルで直接実行する。

❌ 外側のターミナルが対応しているからtmux設定は不要だと考えた
⭕ tmuxの中では、外側が対応していてもShift+Enterに extended-keys の設定が必要になる。

通知の失敗

❌ Warpでデスクトップ通知が出ないのを不具合だと思った
⭕ 既定でデスクトップ通知が出るのはGhostty、Kitty、iTerm2だけだ。preferredNotifChannel を "terminal_bell" にするか、Notificationフックを使う。

❌ iTerm2で通知設定をチェックしただけで終わった
⭕ 「Notification Center Alerts」に加えて「Filter Alerts」の中の「Send escape sequence-generated alerts」も有効にする必要がある。

❌ スクリーンリーダー利用時にベルが鳴らなくなったまま放置した
⭕ v2.1.211より前の /terminal-setup はスクリーンリーダーモードでもベルをオフにしていた。Settings → Profiles → Advanced の「Audible bell」で戻す。

表示の失敗

❌ ちらつき対策で常にフルスクリーンへ切り替えた
⭕ ちらつきだけが問題で同期出力に対応している端末なら、CLAUDE_CODE_FORCE_SYNC_OUTPUT=1 でレンダラを変えずに済む。

❌ カスタムテーマのファイルを作って反映されないと判断した
⭕ 起動時に ~/.claude/themes/ が無かった場合は、最初のテーマファイルを作ったあとに1回だけ再起動が要る。

よくある質問

Shift+Enterを設定せずに改行だけ入れたい

Ctrl+J を押すか、\ を打ってからEnterを押す。どちらも設定なしでどのターミナルでも動く。

Enterで改行、Shift+Enterで送信に入れ替えられますか

できる。キーバインドファイルで chat:newline と chat:submit のアクションを割り当てる。Vimモードのモーションはキーバインドファイルでは再割り当てできない点に注意する。

/terminal-setupは既存のキーバインドを壊しますか

既存のバインドはそのまま残される。すでに設定済みなら already configured のようなメッセージが出て何も変えない。Zedの keymap.json はバックアップを取ってからマージし、読めない・検証できない場合はファイルを変えずに追加すべきブロックを表示する。

tmuxの中で通知が届きません

~/.tmux.conf に set -g allow-passthrough on を入れて tmux source-file ~/.tmux.conf で反映する。パススルーが無いとtmuxが通知と進捗を飲み込む。

tmuxを3.4以降にすればちらつきは直りますか

直らない。2.1.212のリリースノートで「tmuxは3.6系まで同期出力を備えていない」と訂正されている。対応する新しいtmuxは自動検出されるが、3.6系以下なら /tui fullscreen か CLAUDE_CODE_FORCE_SYNC_OUTPUT=1 を使う。

Windowsでバックスペースが1文字ずつ消えるようにしたい

CLAUDE_CODE_BS_AS_CTRL_BACKSPACE=0 を設定する。TERM_PROGRAM が mintty、または TERM が cygwin の場合は既定で素のバックスペースとして読まれるため、この設定は要らない。

大きなログを貼ったら途中が消えました

VS Codeの統合ターミナルは非常に大きな貼り付けでClaude Codeに届く前に文字を落とすことがある。ファイルに書いてパスで読ませる。

あわせて読みたい

運営元 Uravation よりこの事例を自社の業務で試す場合のテーマ選定・評価・本番移行の確認項目を、無料のチェックリストにまとめています。 Claude Code業務自動化PoCチェックリストを受け取る(無料)

参考・出典

Next Step

この事例を、自社の業務に置き換える。

対象業務、利用データ、評価基準、社内展開の順番まで整理すると、AI開発ツール導入の失敗を減らせます。

導入を相談する

チームで学ぶなら: Claude Code 法人研修(2日間ハンズオン) / 1人で習得するなら: 個別指導(週1マンツーマン)