WindowsターミナルのPowerShellとClaude CodeでCtrl+ZのUndoを有効にする

WindowsターミナルでClaude Codeを使っていると、打ち間違いのたびに反射的にCtrl+Zを押してしまう。しかしUndoにならない。PowerShellとClaude Codeの両方でCtrl+ZをUndoにした時の覚書。
Claude(Cowork)と対話しながら設定した。

環境: Windowsターミナル + PowerShell + Claude Code


1. PowerShell側の設定(PSReadLine)

PowerShellのコマンドライン編集はPSReadLineが担当している。
まず現状のCtrl+Zの割り当てを確認。
PS:> Get-PSReadLineKeyHandler -Key Ctrl+z

Windowsモード(既定)ならUndoに割り当て済みのこともある。割り当てられていなければ、以下をプロファイルに追記して恒久化する。

if (!(Test-Path $PROFILE)) { New-Item -Type File -Path $PROFILE -Force | Out-Null }
Add-Content $PROFILE 'Set-PSReadLineKeyHandler -Key Ctrl+z -Function Undo'
Add-Content $PROFILE 'Set-PSReadLineKeyHandler -Key Ctrl+y -Function Redo'
. $PROFILE

これでPowerShellのプロンプト上はCtrl+ZでUndo、Ctrl+YでRedoが効く。

効かない場合はWindowsターミナル側のキーバインド(設定 → 操作)がCtrl+Zを奪っていないか確認する。

なお、これはコマンドライン入力のUndoであって、実行済みコマンドの取り消しではない。


2. Claude Code側はPSReadLineが効かない

PowerShellから起動したClaude Codeのプロンプトでは、上の設定をしてもCtrl+ZでUndoできない。
Claude Codeは独自に入力を処理しているため、PSReadLineの設定は効かない。

調べると、Claude Codeの入力Undoの既定キーは Ctrl+_(Ctrl+Shift+-) で、Ctrl+Zには割り当てられていない。
当初AIからは「最新版ならCtrl+Zで効く」と案内されたが、これは不正確だった。


3. Claude Codeのキーバインドをカスタマイズ

Claude Code v2.1.18以降はキーバインドをカスタマイズできる(バージョンは claude --version で確認)。

Claude Code内で /keybindings を実行すると ~/.claude/keybindings.json が作成されて開くので、以下のように記述する。

{
  "$schema": "https://www.schemastore.org/claude-code-keybindings.json",
  "bindings": [
    {
      "context": "Chat",
      "bindings": {
        "ctrl+z": "chat:undo"
      }
    }
  ]
}

変更は自動検出されるので再起動は不要。これでClaude Codeのプロンプト入力もCtrl+ZでUndoできるようになった。

うまく効かない場合は /doctor でキーバインドの警告を確認する。

ちなみにUnix系ではCtrl+Zはプロセスのサスペンド(SIGTSTP)と衝突するが、Windowsでは問題ない。

補足: 入力テキストではなく、Claudeが行ったファイル変更を巻き戻したい場合は /rewind(またはEsc 2回)を使う。
参考: Customize keyboard shortcuts - Claude Code Docs


▼ 関連記事