Claude CodeのkeybindingFlavorとは — Ctrl+Wの単語削除が変わった理由
Claude CodeのkeybindingFlavor設定はv2.1.261で非推奨になり、Ctrl+Wは常にreadline方式で単語区切りを削除します。設定ファイルに残っていても動作には影響しません。
Ctrl+Wでパスをひとまとめに消せたのに、別の環境では1単語ずつしか消えない。Claude Codeでこの食い違いに遭遇したら、原因はkeybindingFlavorという設定です。この設定はv2.1.261で非推奨になり、今はどの環境でも同じ方式に統一されています。何が変わり、古い設定ファイルがどう扱われるかを確認します。
長いファイルパスやオプション付きのコマンドを入力していて、消したい範囲がひとまとまりの単語なのか、区切り文字を挟んだ塊全体なのかで、欲しいキー操作は変わります。ディレクトリを深く辿った末尾の1階層だけを直したいのか、パス全体を打ち直したいのかは場面ごとに違うからです。同じキーでも版が違えば消える範囲が変わっていた、という食い違いの正体が今回扱う設定です。
Claude CodeのkeybindingFlavorとは
keybindingFlavorは、プロンプト入力欄の単語編集キーの挙動を切り替える設定でした。値は"classic"か"readline"の文字列で、スコープはAny file(ユーザー設定・プロジェクト設定のどちらでも指定可能)、既定値は未設定です。v2.1.238からv2.1.260までの間だけ意味を持ち、"readline"を指定するとCtrl+Wが単語ではなく直前の空白まで削除する方式に切り替わりました。指定しなければ、Ctrl+Wは直前の単語だけを消す従来の挙動のままでした。
v2.1.261以降、この設定は非推奨になり効果を持ちません。単語編集キーは常にreadline方式に統一されたためです。設定ファイルにkeybindingFlavorを書いても、Claude Codeはエラーを出さずに読み込みます。値が捨てられるだけで、設定ファイル自体は今も有効です。
スコープはAny fileでした。ユーザー設定(~/.claude/settings.json)・プロジェクト設定(.claude/settings.json)・ローカル設定(.claude/settings.local.json)・管理設定のどこに書いても読み込まれます。チームで共有しているプロジェクトの.claude/settings.jsonに残っている場合もあり、grepで見つけても慌てて削除する必要はありません。~/.claude.jsonはAny fileとは別の「Global config」という独立したスコープに分類されており、keybindingFlavorはここには含まれません。探すときはsettings.jsonという名前が付くファイルに絞れば十分です。
Ctrl+Wは今どんな単位で文字を消すか
readline方式に統一された結果、Ctrl+Wは句読点を無視して直前の空白まで一気に削除します。src/utils/foo.tsと入力した状態で1回押すと、パス全体が消えます。bashのデフォルト挙動と同じ動きです。消した文字列は保持されるため、Ctrl+Yで貼り戻せます。連続して貼り付け履歴を切り替えたいときはAlt+Yを使います。
長いコマンドを組み立てる途中で引数の一部だけを直したいとき、この一括削除はむしろ邪魔になる場面もあります。そのときは次の節で説明する単語単位のキーに持ち替えれば、消える範囲を自分で選べます。
この貼り付けバッファーはCtrl+W専用ではありません。行末まで消すCtrl+Kや行頭まで消すCtrl+Uで削除した文字列も同じCtrl+Yで復元できます。3つのキーはいずれも1つの履歴を共有しているので、直前に消したのがパスなのか行全体なのかを気にせず貼り戻せます。想定より広い範囲を消してしまったときは、Ctrl+Yで戻す以外にCtrl+_(またはCtrl+Shift+-)で直前の編集そのものを取り消す方法もあります。
一方、Alt+B(前の単語へ移動)・Alt+F(次の単語へ移動)・Alt+D(単語の末尾まで削除)は、句読点で区切られた単語単位でしか動きません。単語は英数字の連続として扱われ、_・.・/のような記号はそこで区切りになります。src/utils/foo.tsでAlt+Bを繰り返すと、ts→foo→utils→srcの順に止まります。この3つのキーをmacOSで使うには、ターミナル側でOptionキーをMetaとして送る設定が別途必要です。
以前のkeybindingFlavorが担っていた「単語だけを消す」挙動は、今も別のキーとして残っています。macOSではOption+Delete、WindowsではCtrl+Backspaceです。設定を書き換える代わりにこちらのキーを使えば、keybindingFlavorなしで単語単位の削除に切り替えられます。Windowsでは、Backspace自体の既定挙動もGit Bash(mintty)かどうかで変わります。詳しくはGit BashのBackspaceが単語ごと消える問題をClaude Codeで直すで扱っています。
つまり同じ「単語」でも、Ctrl+Wは空白区切り、Alt+B・Alt+F・Alt+Dは記号区切りという、別々の基準で動いています。以前のkeybindingFlavorは前者の基準を選べる設定でしたが、後者の基準はどのバージョンでも変わっていません。日本語や中国語のようにスペースを使わない文章でも、これらの単語系ショートカットは1単語ずつ動く・消えるとClaude Codeの公式ドキュメントは説明しています。
Claude Codeの全ショートカット早見表には行移動や履歴検索など他の操作もまとまっています。手元の環境でどのバージョンが動いているかを確認したいときは、次のコマンドで確認できます。
claude --versionVimのword(単語)とWORD(空白区切り)の使い分けと同じ構図
個別設定で選ばせる方式をやめて既定を1つに統一したのは、ターミナルツール間でCtrl+Wの挙動が割れていた状態への是正と読めます。Claude CodeのVimモードには、もともとこれと同じ区別が存在します。文字種で区切る「word」と空白だけで区切る「WORD」です。テキストオブジェクトのiw/aw(単語の内側/周囲)とiW/aW(空白区切りの内側/周囲)がその区別にあたります。dw・de・dbは前者(word)の基準で単語単位を扱う操作です。
たとえばsrc/utils/foo.tsのfoo部分にカーソルがある状態で、diwはfooだけを削除し、diWはパス全体src/utils/foo.tsを削除します。これはAlt+B・Alt+F・Alt+D(文字種で区切る、wordに相当)とCtrl+W(空白だけで区切る、WORDに相当)の関係とそのまま重なります。Vim経験者には、Ctrl+WがWORD寄り、Alt系キーがword寄りと考えると理解が早くなります。
Vimのモーションキー自体はNORMALモード専用で、~/.claude/keybindings.jsonではリマップできない点も共通しています。この設定ファイルの他のアクションについてはClaude Codeの全体設定リファレンスにまとめています。Vim NORMALモードの操作一覧はClaude Code Vimモードの使い方とキー操作一覧を参照してください。
選べる設定を後から廃止して1つの挙動に固定するのは、地味に見えて影響の大きい判断です。選択肢が多いほど、自分の環境ではどちらを選んでいたかを覚えておく負担が増え、他人の端末を借りて作業したときの違和感にもつながります。単語の消え方のような細かい挙動ほど、選ばせるより決め打ちにしたほうが、結果として迷う場面は減ります。
Ctrl+Wだけではない、readline由来のキーは他にもある
Ctrl+Wの単語区切りが「bashと同じreadline方式」に統一されたのは単発の変更ではありません。プロンプト入力を編集するCtrl+GにはCtrl+X Ctrl+Eという別の押し方があり、公式ドキュメントはこちらを「readline-nativeな割り当て」と明記しています。どちらもデフォルトのテキストエディターでプロンプトを開く操作で、Ctrl+X Ctrl+Eはreadlineに慣れた手が自然に伸びるキーです。
コマンド履歴を遡るCtrl+Rも、readlineの逆方向インクリメンタルサーチと同じ発想の機能です。履歴検索の細かい挙動やフルスクリーン表示・Vimモードでの違いはCtrl+R履歴検索でClaude Codeの過去プロンプトを再利用するで扱っています。単語の区切り方だけでなく、キー割り当ての設計方針そのものがreadlineに寄っている点を押さえておくと、他の未知のキーに遭遇したときも挙動を予想しやすくなります。
設定ファイルにkeybindingFlavorが残っていてもエラーにならない
過去に次のような設定を書いていた場合、v2.1.261以降は値を読み込むだけで動作には反映されません。
{
"keybindingFlavor": "readline"
}削除しても追加の副作用はなく、残しておいても実害はありません。判断に迷うほどの設定ではなく、そのままでも消してもどちらでも構いません。設定ファイルの見直しのついでに整理したい場合を除けば、急いで手を付ける理由は特にありません。
利用形態別keybindingFlavor廃止の影響早見表
| 利用形態 | v2.1.261以降の挙動 | 対処 |
|---|---|---|
"readline"を明示設定していた | v2.1.261以降の挙動変化なし。既に望んでいた挙動が既定になっている | 対処設定は削除してよいが残してもよい |
"classic"を明示設定していた | v2.1.261以降の挙動無視され、Ctrl+Wは空白区切りに統一される | 対処単語だけ消したいならOption+Delete(macOS)かCtrl+Backspace(Windows)を使う |
| 未設定のままv2.1.260以前を使っている | v2.1.261以降の挙動Ctrl+Wは単語のみ削除する旧挙動のまま | 対処更新すると挙動が変わる点を先に把握しておく |
| bash・zshの操作感に慣れている | v2.1.261以降の挙動追加設定なしで同じ挙動になる | 対処特に対応不要 |
上の表が示す分かれ目は結局のところ1つです。過去にどちらかの値を自分の意思で書いたかどうかで、変化を体感するかどうかが決まります。何も書かずにアップデートだけを重ねてきた大多数の利用者には、ある日を境に消える範囲が変わったという体感すらなく、静かに移行が終わっています。逆に、社内のドキュメントや個人のメモに「readlineに設定すると使いやすくなる」という古い手順が残っている場合は、その手順自体がもう不要になっている点だけ覚えておくとよいでしょう。
まとめ
keybindingFlavorはv2.1.238からv2.1.260までの短い期間だけ意味を持った設定で、v2.1.261以降は非推奨になり効果を持ちません。今のClaude Codeでは、Ctrl+Wは常に直前の空白まで削除し、Alt+B・Alt+F・Alt+Dは記号区切りの単語単位で動きます。単語だけを消したい場面では、keybindingFlavorを書き直すのではなくOption+DeleteかCtrl+Backspaceを使う方法に切り替えます。
設定ファイルへの対応が必要なのは、"classic"を明示していたケースだけです。それ以外は、古い記述が残っていても放置して構いません。挙動そのものを確かめたいときは、src/utils/foo.tsのような区切り文字入りの文字列を入力欄に打ってからCtrl+WとAlt+Bを試すのが、ドキュメントを読むより早い確認方法です。
数字やバージョン番号を覚えておく必要はなく、動かして違いを目で見れば十分です。細かい設定名を暗記するより、目の前の入力欄で1回試すほうが記憶に残ります。