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