Claude CodeでCtrl+Enterを送信, Enterを改行に変更する
免責事項
- 筆者は本記事の掲載内容を用いて行う一切の行為について, 何らの責任を負うものではありません.
- 本記事を公開するにあたり, 掲載されている情報の正確性については万全を期しておりますが, 筆者は掲載内容の正確性・完全性・信頼性・最新性を保証するものではありません.
- 筆者はリンク先サイトについて, その掲載情報の正確性・合法性等を保証するものではありません. リンク先サイトの利用によって生じた問題に対して筆者は責任を負いません.
はじめに
Claude Codeを使っていると, プロンプトの入力中に改行を入れたいだけなのに, Enterを押した瞬間に送信されてしまう, という経験をした方は多いと思う.
特に複数行のプロンプトを丁寧に書きたい場合, この挙動はストレスになる.
そこで本記事では, Claude Codeのキーバインドを以下のように変更する手順を紹介する.
| 操作 | キー |
|---|---|
| 送信 | Ctrl+Enter |
| 改行 | Enter |
なお, Windows Terminalを利用している場合, Ctrl+EnterがそのままだとClaude Codeへ届かないことがある.
そのため本記事では, Windows Terminal側の設定とClaude Code側の設定の両方を行う.
対象
本記事は以下のような方を対象とする.
- Claude Codeで, Enterで送信されてしまうのを改行に変えたい人
- Ctrl+Enterで送信するように設定したい人
- Windows Terminal + WSL環境でClaude Codeを使っている人
環境
本記事は以下の環境を前提とする.
| 項目 | 内容 |
|---|---|
| ターミナル | Windows Terminal |
| シェル | WSL (Ubuntu) |
| 対象ツール | Claude Code |
PowerShellで直接Claude Codeを使う場合の手順も併記する.
アブストラクト
本記事の手順は大きく分けて以下の2ステップである.
-
Windows Terminal側の設定
Ctrl+Enterを, Claude Codeが区別できるエスケープシーケンス (\u001b[13;5u) として送るように割り当てる. -
Claude Code側の設定
~/.claude/keybindings.jsonで,ctrl+enterを送信,enterを改行に割り当てる.
最後に, 設定がうまくいかなかった場合の戻し方と, エスケープシーケンスの意味についての補足を記載する.
1. Windows Terminal側の設定
Windows Terminalの settings.json を開く.
通常版の場合.
notepad "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json"
Preview版の場合.
notepad "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe\LocalState\settings.json"
actions 配列の中に以下を追加する.
{
"command": {
"action": "sendInput",
"input": "\u001b[13;5u"
},
"keys": "ctrl+enter"
}
すでに actions に他の要素がある場合は, 前の要素との間にカンマを入れる.
例.
"actions": [
{
"command": {
"action": "copyToClipboard"
},
"keys": "ctrl+shift+c"
},
{
"command": {
"action": "sendInput",
"input": "\u001b[13;5u"
},
"keys": "ctrl+enter"
}
]
2. Claude Code側の設定
Claude Codeのキーバインド設定ファイルを開く.
WSLまたはLinuxの場合.
nano ~/.claude/keybindings.json
Windows PowerShellの場合.
notepad $env:USERPROFILE\.claude\keybindings.json
以下を設定する.
{
"$schema": "https://www.schemastore.org/claude-code-keybindings.json",
"$docs": "https://code.claude.com/docs/ja/keybindings",
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+enter": "chat:submit",
"enter": "chat:newline"
}
}
]
}
3. 反映
設定を反映させるため, Windows TerminalとClaude Codeを再起動する.
4. 戻し方
万が一送信できなくなった場合は, Claude Code側の設定ファイルを退避することで元に戻せる.
WSLまたはLinuxの場合.
mv ~/.claude/keybindings.json ~/.claude/keybindings.json.bak
Windows PowerShellの場合.
Rename-Item $env:USERPROFILE\.claude\keybindings.json keybindings.json.bak
補足: エスケープシーケンスの意味
\u001b[13;5u は, Ctrl+EnterをClaude Codeへ区別して送るためのエスケープシーケンスである.
分解すると以下のようになる.
\u001b [ 13 ; 5 u
| 部分 | 意味 |
|---|---|
\u001b |
ESC文字 |
[ |
CSIの開始 |
13 |
Enterキーが送る文字コード, CR |
; |
区切り |
5 |
Ctrl修飾キー |
u |
CSI u形式の終端 |
CSIは Control Sequence Introducer の略である.
CSI u 形式では, 次の順序でキー入力を表す.
<キーコード> ; <修飾キー> u
今回の 13;5u は, キーコード13のEnter に Ctrl修飾キー を付けた入力を表す.
つまり実体は以下である.
ESC [ 13 ; 5 u
Windows Terminal側でCtrl+Enterをこの文字列として送り, Claude Code側で ctrl+enter を chat:submit として扱うことで, 目的のキーバインドが実現される.
最後に
本記事についてお気づきの点がございましたら, ご連絡いただけると幸いです.