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の既定ウィンドウでClaude Codeを起動するとTERM_PROGRAM=minttyが自動的に設定されるため、何も設定しなくてもBackspaceは1文字ずつの削除になります。
Cygwinは、Windows上でLinuxに近いコマンドライン環境を提供するプロジェクトです。Cygwin付属のターミナルから起動した場合はTERM=cygwinが設定され、mintty経由かどうかにかかわらず同じ例外扱いを受けます。
一方、コマンドプロンプトや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文字 |
この表の分かれ目は、Windowsで使っているシェルがminttyかどうかだけです。同じWindows機でも、Git Bashのウィンドウとコマンドプロンプトのウィンドウでは消える範囲が変わります。以前はWindowsでClaude Codeを動かすのにGit Bashが必須でしたが、v2.1.120でネイティブ対応が入り不要になりました。それでも使い慣れたシェルとしてGit Bashを選ぶ人は多く、minttyの例外挙動を知っておくと役立ちます。
CLAUDE_CODE_BS_AS_CTRL_BACKSPACEで挙動を固定する
意図した挙動になっていない場合は、CLAUDE_CODE_BS_AS_CTRL_BACKSPACEという環境変数で上書きできます。値は0か1で、どちらもプラットフォームの既定を置き換えます。
Backspaceを押すたびに単語がまるごと消えてしまうなら、0を設定します。
CLAUDE_CODE_BS_AS_CTRL_BACKSPACE=0 claudePowerShellでは次の形式です。
$env:CLAUDE_CODE_BS_AS_CTRL_BACKSPACE = "0"; claude0を設定すると、BackspaceキーだけでなくCtrl+Hも1文字ずつ削除する扱いに統一されます。キー自体を変えるのではなく、Claude Codeが受け取ったバイト列をどう解釈するかを変える設定です。ターミナルによってはBackspaceキーそのものがCtrl+Hと同じ^Hを送るため、この2つは常に同じ設定の影響を受けます。
逆に、macOSやLinuxでCtrl+Backspaceを押しても1文字しか消えない場合は、ターミナルが^HをCtrl+Backspaceの代わりに送っています。この場合は1を設定すると、単語単位の削除に切り替わります。
毎回入力するのは面倒なので、恒常的に固定するなら設定ファイルのenvキーに書きます。
{
"env": {
"CLAUDE_CODE_BS_AS_CTRL_BACKSPACE": "0"
}
}値は0/1のほかtrue/falseでも指定でき、大文字・小文字は区別されません。設定ファイルを保存すると、起動中のセッションにも変更が反映されます。この変数を含む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が転送されないことがある」と述べています。ローカル端末がminttyであっても、SSH先のClaude CodeまでTERM_PROGRAM=minttyが届かない構成では、この節で説明した自動判定が働きません。SSH越しにリモート接続する構成では、CLAUDE_CODE_BS_AS_CTRL_BACKSPACEをリモート側の設定ファイルに明示しておくほうが挙動が安定します。
Backspace以外で単語を消す方法
環境変数を変えずに済ませたいときは、Backspaceに頼らず単語削除専用のショートカットを使う方法もあります。Ctrl+Wは直前の空白まで一気に削除し、記号を無視するためsrc/utils/foo.tsのようなパスも1回で消せます。Alt+Dは単語の末尾まで削除し、こちらは英数字の連続だけを単語とみなして_・.・/で区切ります。Alt+B・Alt+Fも同じ区切り方でカーソルを前後の単語へ移動します。
Alt+B・Alt+F・Alt+Dが単語とみなすのは英数字の連続だけです。src/utils/foo.tsと入力した状態でAlt+Bを繰り返し押すと、カーソルはtsの先頭、fooの先頭、utilsの先頭、srcの先頭の順に止まります。/や.が区切りとして働くため、パス全体を1語として扱うCtrl+Wとは止まる位置が異なります。日本語や中国語のようにスペースを使わない文章でも、これらの単語系ショートカットは1単語ずつ動作します。
削除した文字列はCtrl+Yで貼り戻せます。連続して貼り付け履歴を切り替えたいときはAlt+Yを押します。macOSでこれらのAlt+系キーを使うには、ターミナル側でOptionキーをMetaとして送る設定が別途必要です。Ctrl+W・Alt+B・Alt+F・Alt+Dは~/.claude/keybindings.jsonでリマップできる対象に含まれていません。単語の区切り方の違いと、この設定が生まれた経緯はClaude CodeのkeybindingFlavorとはで扱っています。
貼り付けた大きなテキストが[Pasted text #1 +120 lines]のようなプレースホルダーに畳まれている場合、Ctrl+WやCtrl+Kで削除範囲がプレースホルダーに触れると、そのプレースホルダーごと消えます。貼り付けた内容自体は~/.claude/paste-cache/に保持されているため、Ctrl+Yで復元すればプレースホルダーごと戻せます。
これらの単語編集ショートカットは、Claude Code v2.1.261以降でreadline方式に統一されています。以前のバージョンで挙動が違っていた場合は、アップデートすると変わる点をあらかじめ把握しておくと戸惑いません。
Backspace関連の変更履歴
Windows版でCtrl+Backspaceが単語を削除する今の仕様は、v2.1.113で入りました。この変更が、Windowsでの既定挙動の起点です。
その後もBackspace関連の不具合はいくつか修正されています。v2.1.136では、Ctrl+Gで外部エディターを開いてプロンプトを編集した後、拡張キーモードに対応したターミナルでBackspaceとCtrl+Backspaceが入れ替わってしまう不具合が修正されました。v2.1.238では、SSHやmosh経由の低速な回線で^Hを送るターミナルを使っていると、キー入力がまとめて届いたときに押しっぱなしのBackspaceが無視される不具合が修正されています。v2.1.239では、検索ボックス内に限ってCtrl+Backspaceが単語ではなく1文字しか削除しない不具合が修正されました。
いずれも該当バージョン以降では解消済みです。それでも手元の挙動が本記事の説明と食い違う場合は、古いバージョンを使っている可能性があります。次のコマンドで手元のバージョンを確認できます。
claude --versionまとめ
WindowsでBackspaceが単語ごと消えるかどうかは、使っているシェルがminttyかCygwinかで決まります。Git Bashのウィンドウならそのままで1文字ずつ消え、コマンドプロンプトやPowerShell、Windows Terminalでは既定でCtrl+Backspace扱いになります。macOSとLinuxには、この例外そのものが存在しません。
意図と違う挙動になっている場合は、CLAUDE_CODE_BS_AS_CTRL_BACKSPACEを0か1に設定すれば、シェルの種類に関係なく挙動を固定できます。設定ファイルのenvキーに書いておけば、次回以降のセッションでも同じ挙動が引き継がれます。単語単位の削除自体が目的なら、Backspaceを設定し直すよりもCtrl+WやAlt+Dを使うほうが、環境をまたいでも同じ結果になります。