Claude Codeのコピペで余分なインデントが付く問題と対処法
Claude Codeのターミナル出力をコピーすると行末に空白パディングが混入し、コードやコマンドの貼り付けが崩れます。原因の分析と/copy・/tui defaultなどの対処法をまとめます。
Claude Codeのターミナル出力をマウスでドラッグして選択し、別のエディタやシェルへ貼り付けると、各行の末尾に大量の空白が付いてくることがあります。行頭に余分な字下げが入って見えることもあれば、複数行のコマンドでは行末の\の後ろに空白が入り込み、続きの行が別のコマンドとしてシェルに実行されてしまうこともあります。GitHub上で2026年1月から報告が続く既知の問題で、原因の分析と今使える対処法をまとめます。
何が起きているのか
症状はシンプルです。ターミナル画面に表示されている行は、実際に書かれた文字数よりも長く、末尾がターミナル幅いっぱいまで半角スペースで埋められています。画面上は見た目に影響しませんが、ドラッグ選択でコピーするとこの空白が実体のある文字としてそのままクリップボードに乗ります。
Issue #18170は、症状を2種類に分けて報告しています。ひとつは各行冒頭に余分なタブやスペースが付く字下げの崩れ、もうひとつは行末に付く不可視のスペースです。行末の空白は、バックスラッシュで継続しているはずの複数行コマンドを途中で独立した行として解釈させ、シェルが1行ずつ別コマンドとして実行してしまう報告があります。次節で扱う技術分析は行末パディングの発生原因を説明したもので、行頭側の字下げがなぜ付くのかは同じ分析では特定されていません。
Issue #18170は2026年1月14日に報告され、2026年9月9日にも新しいコメントが投稿されています。macOSのTerminal.appとiTerm2、LinuxのGNOME Terminal・Kitty・Ghostty・JetBrains Terminal、Windows TerminalとPowerShellなど、OSやターミナルエミュレータを問わず再現報告が集まっており、特定の環境だけの不具合ではありません。関連するIssue #23014では、空白パディングに加えて反転表示用のANSIエスケープシーケンス(\x1b[7m/\x1b[27m)まで一緒にコピーされる報告もあります。
もう1つ、同じIssueで報告されている症状に長い行の強制改行があります。本来は1行に収まるはずの長いコマンドが、ターミナル幅で折り返されてハードな改行文字として出力に埋め込まれるというもので、コピー後に貼り付けると1本のコマンドだったはずの内容が複数行に分断されます。空白パディングとは別の原因ですが、症状としては同時に発生することが多く、どちらも「見た目通りにコピーできない」という不満につながっています。
なぜ余分な空白が付くのか
Issue #23014に投稿された技術分析によると、Claude CodeはInkというTUIフレームワークをフォークして使っており、画面描画は仮想的なスクリーンバッファ(幅×高さのマス目)に対して行われます。空のマス目は初期値としてスペース文字(0x20)を持ち、通常の描画パスはこの空セルも含めて全列をそのまま端末へ出力する、という解析結果が示されています。
vimやhtopのようなcurses系のTUIは、行の末尾を\x1b[K(erase to end of line)というエスケープシーケンスでクリアし、そこから先が空であることを端末に伝えます。空のマス目を実際の文字で埋めるか、エスケープシーケンスで「ここから先は空」と伝えるかの違いが、コピー時に余分な文字が付くかどうかを分けている、というのがこの分析の要旨です。
この原因分析はコミュニティによるcli.jsの逆解析に基づくもので、Anthropicが公式に認めた説明ではありません。同じ投稿では、デバッグ用の描画パス(getRenderOpsDebug)にはすでに各行を.trimEnd()する処理が実装済みだが、通常利用時の描画パスには適用されていない、という指摘もされています。真偽はともかく、Issueに多数のユーザーが再現性を報告している点は事実として確認できます。
今すぐ試せる回避策
原因の完全な修正を待たずに使える回避策がいくつか報告されています。以下の対処法から、環境や用途に合うものを選びます。
/copyコマンドでクリップボードへ送る
マウス選択の代わりに/copyコマンドを使うと、空白を含まないクリーンなテキストがクリップボードに送られます。
/copyコードブロックが含まれる応答では個別に選べるピッカーも開きます。コマンドの詳しい使い方はClaude Code copyコマンドでコードブロックだけを送るにまとめています。
/tui defaultでターミナル本来の選択に戻す
Claude Codeにはフルスクリーンレンダリング(/tui fullscreen)と、ターミナル本来のドラッグ選択に任せる/tui defaultの2つの描画モードがあります。/tui defaultに切り替えて空白混入が収まったという報告があり、試す価値があります。
/tui defaultただしIssueのコメントを追うと効果は環境によって分かれています。Ghostty環境では逆に/tui fullscreenへ切り替えたほうがクリーンにコピーできたという報告もあり、どちらが効くかは手元の環境で両方試して確かめる必要があります。フルスクリーンレンダリングの仕組みと/tuiが切り替えを拒否する条件はClaude CodeのTUI(フルスクリーン)とはで扱っています。
ターミナル側の設定で末尾空白を除去する
一部のターミナルエミュレータには、コピー時に末尾の空白を自動で取り除く設定があります。
- Kitty:
~/.config/kitty/kitty.confにstrip_trailing_spaces smartを追加すると、全行に共通する末尾空白を選択時に除去します - Ghostty: 設定ファイルにコピー用のキーバインドを
copy_to_clipboard:plainとして定義すると、プレーンテキストとしてコピーされ末尾の空白が付きません。ただし長い行のハード改行による分断は、この設定だけでは解消しないとの報告があります
いずれもターミナル側の機能でClaude Codeの出力自体を変えるものではないため、他のアプリの出力には影響しません。
貼り付け後にコマンドでクリーンアップする
すでに空白付きでクリップボードに入ってしまった内容は、パイプでクリーンアップできます。行末の空白を落とす例です。
pbpaste | sed 's/[[:space:]]*$//' | pbcopymacOSのpbpaste/pbcopyを使った例です。Linuxではxselの--outputと--inputを組み合わせれば同じ処理ができます。
xsel --clipboard --output | sed 's/[[:space:]]*$//' | xsel --clipboard --input行頭の字下げが崩れる症状にはsed 's/^[[:space:]]*//'で行頭の空白をまとめて削る方法もありますが、これは行頭にある空白を区別せず全て落とすため、Pythonやyamlのようにインデント自体に意味を持つ内容には使えません。フラットなコマンドやログの貼り付けに限定して使う方法です。
使い分け早見表
| 回避策 | 効果 | 手間 |
|---|---|---|
/copyコマンド | 効果高(空白なしで確実) | 手間低。コマンド1つ |
/tui defaultへの切り替え | 効果環境依存 | 手間低。コマンド1つ |
| ターミナル設定(Kitty/Ghostty) | 効果環境依存(対応ターミナルのみ) | 手間中。設定ファイルの編集が必要 |
| コピー後のクリーンアップコマンド | 効果高 | 手間高。貼り付けるたびに手作業が発生 |
恒常的に困っているなら/copyが最も手間が少ない選択です。マウスでのドラッグ選択にこだわりたい場合は、まず/tui defaultと/tui fullscreenの両方を試し、手元の環境で空白が付かないほうに固定するのが現実的です。
一部のバージョンでは改善報告もあるが、解消は未確認
Issueのコメントを追うと、v2.1.141やv2.1.161の時期に「iTerm2でマウスコピーの空白が消えた」という報告が複数投稿されています。ただし同じバージョンでもLinux環境では変化がないという反論が続けて投稿されており、特定のバージョンで全面的に解消したと断定できる状態ではありません。改善報告と再発報告が交互に投稿される展開が2026年前半を通じて続いており、OSやターミナルの組み合わせによって挙動が揺れていることがうかがえます。手元の環境で改善しているかどうかは、バージョン番号だけでなく実際に貼り付けて確かめるのが確実です。
CLAUDE.mdに指示を書いて回避する運用
コマンド生成のたびに手作業でクリーンアップするのが面倒な場合、Claude Code自身に回避策を実行させる運用も報告されています。複数行のシェルコマンドを直接出力させず、いったん一時ファイルに書き出してからpbcopy(Linuxならxsel)でクリップボードに送るよう、CLAUDE.mdに指示を追加しておく方法です。実際に報告されている指示文はこのような内容です。
複数行のシェルコマンドは直接出力せず、いったん/tmp/cmd.shに書き出してから`cat /tmp/cmd.sh | pbcopy`でクリップボードに送ること。この指示をCLAUDE.mdに加えておくと、複数行コマンドを提示する場面でClaude Code側がファイル経由の受け渡しを選ぶようになります。生成したコマンドをターミナル画面に出力せずpbcopyへ直接渡すため、空白パディングの原因になっているTUIの画面描画そのものを経由しません。応答全体をいちいちコピーし直す前提のワークフローを変えたくない場合に向いた回避策です。
SSH越しでは/copyのwキーでファイルに書き出す
この空白パディングはローカル接続に限った現象ではありません。Issue #23014に添付されたxxdの実データは、SSH越しの接続で端末のドラッグ選択を使って貼り付けた内容から採取されたもので、ローカル接続と同じ空白パディングが確認されています。
SSH越しでクリップボードコピーが不安定なときは、/copyのピッカーでwキーを押してファイルへ直接書き出す方法が確実です。クリップボードへの転送経路をまるごと迂回してリモートのファイルシステムへ直接書き込むため、ローカル側の端末設定やクリップボード転送の可否に左右されません。詳しい手順はClaude Code copyコマンドでコードブロックだけを送るにまとめています。SSH接続時の認証・設定全般はClaude Code SSH接続ガイドで扱っています。
まとめ
Claude Codeのターミナル出力をコピーすると行末に空白が混入する問題は、2026年1月の報告から半年以上が経過してもGitHub Issue上ではオープンのままで、OS・ターミナルエミュレータを問わず再現報告が続いています。コミュニティの分析では、TUI描画に使われているInkの画面バッファが空のマス目までスペース文字で埋めて出力していることが原因とされていますが、これはAnthropic公式の説明ではありません。
今すぐ確実に回避したいなら/copyコマンド、マウス選択にこだわるなら/tui defaultと/tui fullscreenを環境に応じて使い分ける、Kitty・Ghosttyならターミナル側の設定を足す、といった対処法を組み合わせるのが現実的です。修正を待つ間は、コピペ前提のワークフローに合わせて対処法を選んでおくと余計な手直しを減らせます。Claude Code全般のトラブルシューティングはClaude Codeでよくあるエラー10選にもまとめています。