GhosttyでCtrl+Enterを入力すると、改行の代わりに;5;13~という文字列がそのまま入力される。

原因

Enterキー単体ではCR\r)が送られるだけである。 Ctrlのような修飾キーを同時に押した場合、単なる\rだけでは「Ctrl押下」の情報を伝えられない。

GhosttyはxtermのmodifyOtherKeysというプロトコルに従い、修飾キー付きのキー入力をESC [ 27 ; <modifier> ; <keycode> ~という形式のエスケープシーケンスへエンコードして送信する。 xtermの仕様では、13はEnter(CR)のASCIIコード、5はControlが押されたことを表す修飾キー番号と定義されている(Shift=2、Alt=3、Control=5など)。 これに当てはめると、Ctrl+Enterの場合ESC[27;5;13~が送信されていると考えられ、先頭のESC[27部分が何らかの理由で表示されず、;5;13~という文字列に見えている可能性が高い。

シェルのreadlineやvimなど、使用しているアプリケーションがこのmodifyOtherKeysプロトコルを解釈できない場合、エスケープシーケンスがそのまま文字として入力されてしまう。

対処法

Ghosttyの設定ファイルにkeybindを追加し、Ctrl+Enterに対して意図した動作を明示的に割り当てる。

keybind = ctrl+enter=text:\n

この設定により、Ctrl+Enterで改行文字(\n)が入力されるようになる。

参考

Keybindings - Configuration - Ghostty Action Reference - Keybindings - Ghostty Shift+Enter produces escape sequence 27;2;13~ instead of newline in Claude Code - ghostty-org/ghostty Discussion #7780

上記のDiscussionはShift+Enter27;2;13~)についての報告であり、同じ仕組みがCtrl+Enterにも適用されると推測される。