Git BashのBackspaceが単語ごと消える問題をClaude Codeで直す
Windows版Claude CodeのBackspaceはターミナルによって挙動が変わり、Git Bash(mintty)だけ例外扱いです。原因とCLAUDE_CODE_BS_AS_CTRL_BACKSPACEでの固定方法を扱います。
WindowsでClaude Codeを使っていると、Backspaceを1回押しただけで直前の単語がまるごと消えることがあります。原因は、ターミナルが送る^H(0x08のバイト)をClaude Codeがどう解釈するかがWindowsの既定で決まっていて、Git Bashの既定ターミナルであるminttyだけがその既定から外れているためです。挙動は環境変数1つで固定できます。
Backspaceがminttyだけ違う理由
Claude Codeは、Windows上でBackspaceキーが送る^Hを既定でCtrl+Backspace扱いにします。Ctrl+Backspaceは直前の単語をまとめて削除するショートカットです。macOSとLinuxでは、この^Hは常に通常のBackspaceとして扱われ、1文字だけが消えます。
Windowsのこの既定には例外があります。TERM_PROGRAMがminttyのとき、またはTERMがcygwinのときだけ、Claude Codeは^Hを通常のBackspaceとして扱い、1文字ずつ削除します。この2つの環境変数のどちらか一方が条件を満たせば例外が適用され、両方を満たす必要はありません。
minttyは、Cygwin向けに作られたターミナルエミュレーターです。Git for Windowsが同梱するGit Bashは、既定でこのminttyをウィンドウとして使います。Git Bashの既定ウィンドウ(mintty)ではTERM_PROGRAMがminttyになるため、何も設定しなくてもBackspaceは1文字ずつの削除になります。scoopでGitを入れた場合はbash.exeの場所がProgram Filesと異なり、CLAUDE_CODE_GIT_BASH_PATHでのパス指定が別途必要です。
Cygwinは、Windows上でLinuxに近いコマンドライン環境を提供するプロジェクトです。Cygwinの環境でTERM=cygwinが設定されるときも、同じ例外扱いを受けます。
一方、コマンドプロンプトやPowerShell、Windows Terminalなどmintty以外のシェルからClaude Codeを起動すると、この2つの条件はどちらも満たされません。既定のCtrl+Backspace扱いが適用され、Backspaceを押すたびに直前の単語がまるごと消えます。ネイティブ版とWSL版のどちらを使うかでも既定のシェルは変わるため、選び方に迷う場合はClaude Code Windowsインストールで全体像を確認できます。
環境別のBackspaceデフォルト挙動
| 環境 | ^Hの解釈 | 1回のBackspaceで消える範囲 |
|---|---|---|
| Windows(cmd.exe / PowerShell / Windows Terminalなど、mintty以外) | ^Hの解釈Ctrl+Backspace扱い | 1回のBackspaceで消える範囲直前の単語まるごと |
| Windows + Git Bash(mintty) | ^Hの解釈通常のBackspace扱い | 1回のBackspaceで消える範囲1文字 |
Windows + Cygwin(TERM=cygwin) | ^Hの解釈通常のBackspace扱い | 1回のBackspaceで消える範囲1文字 |
| macOS / Linux | ^Hの解釈常に通常のBackspace扱い | 1回のBackspaceで消える範囲1文字 |
この表の分かれ目は、Claude Codeを起動した端末がTERM_PROGRAM=minttyかTERM=cygwinを名乗るかどうかだけです。同じWindows機でも、Git Bashのウィンドウとコマンドプロンプトのウィンドウでは消える範囲が変わります。
混同しやすいのは、Claude CodeのBashツールが使うGit Bashとは別の話だという点です。Git for Windowsを入れていればBashツールはGit Bashでコマンドを実行しますが、入力欄のBackspaceの解釈を決めるのは、入力している端末の変数です。Git for Windowsはv2.1.120から必須ではなくなり、入っていなければシェルツールにPowerShellが使われます。
VS Codeの統合ターミナルで起きた報告
Git Bashのウィンドウ以外では、VS Codeの統合ターミナルからの報告が目立ちます。GitHubのissue #66576は、Windowsの統合ターミナルでBackspaceが前の単語ごと消えるという報告です(v2.1.169、2026年6月に投稿、7月にクローズ)。投稿者は、同じ機械のVS Code本体やメモ帳では起きないと書いています。コメントには「Claude Codeを開いた直後に出ることがあり、閉じて開き直すと直る」という声もあります。
#98743は、VS Codeの統合ターミナルで動かしたGit Bash(zsh)で、Windows 11・v2.1.286・間欠的に起きるという報告です。2026年10月1日に投稿されたopenのissueで、投稿者は受け取ったバイトを7fと書いています。CLAUDE_CODE_BS_AS_CTRL_BACKSPACEの説明は0x08(^H)を対象にしているため、7fが届く端末でこの変数が効くかどうかは、issueの本文からは分かりません。
CLAUDE_CODE_BS_AS_CTRL_BACKSPACEで挙動を固定する
意図した挙動になっていないときは、CLAUDE_CODE_BS_AS_CTRL_BACKSPACEという環境変数でプラットフォームの既定を上書きします。Ctrl+Hはkeybindings.jsonでも割り当てを変えられない予約キーなので、^Hの解釈を動かす手段はこの変数に限られます。
症状に合わせて選ぶ値
0を設定する
Windowsのmintty以外で、Backspaceのたびに直前の単語が消える場合です。BackspaceもCtrl+Hも1文字ずつ消える扱いになります。
1を設定する
macOSやLinuxで、ターミナルがCtrl+Backspaceに^Hを送っている場合です。単語単位の削除に切り替わります。
原因を切り分けて固定するまで
- 1
起動した端末の変数を見る
Claude Codeを起動する前に、同じ端末で
TERM_PROGRAMとTERMを表示します。Git Bashなら下のコマンド、PowerShellなら$env:TERM_PROGRAMと$env:TERMです。 - 2
mintty・cygwinかどうかで分ける
TERM_PROGRAMがmintty、またはTERMがcygwinなら、既定で1文字削除になるはずの端末です。VS Codeの統合ターミナルなど、どちらでもない端末で単語ごと消えるなら、^HがCtrl+Backspace扱いになっています。 - 3
一度だけ試す
シェルで変数を付けて起動し、Backspaceが1文字ずつ消えるかを見ます。
- 4
settings.jsonのenvに書く
効いたら、設定ファイルの
envキーに書いて恒常的に固定します。
手順1の確認コマンドです。
echo "TERM_PROGRAM=$TERM_PROGRAM TERM=$TERM"手順3で、Backspaceを押すたびに単語がまるごと消える場合は0を設定して起動します。
CLAUDE_CODE_BS_AS_CTRL_BACKSPACE=0 claudePowerShellでは次の形式です。
$env:CLAUDE_CODE_BS_AS_CTRL_BACKSPACE = "0"; claudeこの変数はキー自体を変えず、Claude Codeが受け取ったバイト列をどう解釈するかだけを変えます。BackspaceがCtrl+Hと同じ^Hを送る端末では、この2つは常に同じ設定の影響を受けます。
恒常的に固定するなら、手順4のとおり設定ファイルのenvキーに書きます。
{
"env": {
"CLAUDE_CODE_BS_AS_CTRL_BACKSPACE": "0"
}
}環境変数の一般則では、0/1のほかtrue/falseでも指定でき、大文字・小文字は区別されません。Claude Codeは設定ファイルを監視して再読み込みするため、多くの編集は再起動なしで反映されます。この変数を含むClaude Codeの環境変数全体はClaude Code環境変数リファレンスにまとまっています。
どのファイルに書くかで、適用される範囲が変わります。
| 設定ファイル | 適用範囲 |
|---|---|
~/.claude/settings.json | 適用範囲自分が使う全プロジェクト |
.claude/settings.json | 適用範囲プロジェクトに関わる全員(バージョン管理にコミット) |
.claude/settings.local.json | 適用範囲このプロジェクトの自分だけ(バージョン管理対象外) |
| 管理設定(Managed settings) | 適用範囲組織内の全員(管理者が配布) |
チームでGit Bashの利用を揃えているなら、プロジェクトの.claude/settings.jsonに書いてコミットすれば、メンバーが個別に設定し直す手間を省けます。個人の端末だけで直したいときはsettings.local.jsonか~/.claude/settings.jsonを使います。
SSH経由でリモートのマシンのClaude Codeを使う構成では、判定に使う変数がリモートに届かないことがあります。別の環境変数CLAUDE_CODE_FORCE_STRIKETHROUGHの説明が、SSH越しでTERM_PROGRAMが転送されないケースを例に挙げています。リモート側にTERM_PROGRAM=minttyが届かなければ、mintty向けの例外は判定に使えません。その構成では、CLAUDE_CODE_BS_AS_CTRL_BACKSPACEをリモート側の設定ファイルに明示しておく選択肢があります。
Backspace以外で単語を消す方法
環境変数を変えずに済ませたいときは、Backspaceに頼らず単語削除専用のショートカットを使う方法もあります。Ctrl+Wは直前の空白まで一気に削除し、記号を無視するためsrc/utils/foo.tsのようなパスも1回で消せます。直前の1語だけを消したいときは、macOSならOption+Delete、WindowsならCtrl+Backspaceが公式の答えです。つまりWindowsの既定で起きている「単語ごと消える」は、Ctrl+Backspaceとして読まれた結果です。
Alt+Dは単語の末尾まで削除します。Alt+B・Alt+F・Alt+D・Option+Delete・Ctrl+Backspaceは、英数字の連続だけを単語とみなして_・.・/で区切ります。src/utils/foo.tsと入力した状態でAlt+Bを繰り返すと、カーソルはts、foo、utils、srcの先頭の順に止まります。パス全体を1語にするCtrl+Wとは止まる位置が異なります。日本語や中国語のようにスペースのない文章でも、単語系のショートカットは1単語ずつ動きます。
削除した文字列はCtrl+Yで貼り戻せ、続けてAlt+Yを押すと以前に削除した文字列へ切り替わります。macOSでAlt+系キーを使うには、ターミナル側でOptionキーをMetaとして送る設定が別途必要です。keybindings.jsonのアクション一覧にも、これらの単語編集に対応するものは載っていません。
これらはreadlineの規約で、v2.1.261以降で適用されます。以前に単語編集の挙動を切り替えていたkeybindingFlavor設定は非推奨になり、今は効果がありません。経緯はClaude CodeのkeybindingFlavorとはで扱っています。
Backspace関連の変更履歴
Backspace関連のchangelog
- v2.1.113(2026年4月17日)Windowsで単語削除が入る
Windowsで
Ctrl+Backspaceが直前の単語を削除するようになりました。Windowsでの既定挙動の起点です。 - v2.1.136(2026年5月8日)BackspaceとCtrl+Backspaceの入れ替わり
Ctrl+Gで外部エディターを開いた後、拡張キーモードが維持されるターミナルでBackspaceとCtrl+Backspaceが入れ替わる不具合が修正されました。 - v2.1.238(2026年8月20日)押しっぱなしのBackspace
SSHやmoshの低速な回線で、
^Hを送るターミナルの押しっぱなしのBackspaceが、入力がまとめて届いたときに無視される不具合が修正されました。 - v2.1.239(2026年8月21日)検索ボックスとプレースホルダー
検索ボックスでCtrl+Backspaceが単語でなく1文字を消す不具合と、
Ctrl+Wなどで削除したときに[Pasted text #N]のプレースホルダーが壊れる不具合が修正されました。
手元の挙動がここまでの説明と食い違うときは、古いバージョンを使っている可能性があります。次のコマンドで確認できます。
claude --versionまとめ
Windowsで効くのは、Git Bashかどうかではなく、起動した端末がminttyかCygwinを名乗るかどうかです。VS Codeの統合ターミナルなどそれ以外では、まずTERM_PROGRAMを見て、単語ごと消えるならCLAUDE_CODE_BS_AS_CTRL_BACKSPACE=0をsettings.jsonのenvに固定します。7fを送る端末の報告にはまだ解決が付いていないため、その場合は固定後の挙動を実際に確かめる必要があります。