【Emacs】
vterm で nano が終了できなくなった
(vterm-send-next-key)

関連記事

1. vtermでnanoの終了コマンドが反応しない

Emacs の vterm 上で nano が起動してしまい、C-x で終了しようとしても何も起きないという状況に陥って困りました。

M-x vterm-send-next-key を実行してから C-x を押します。

vterm-send-next-key は、直後のキー入力を Emacs のキーバインドをバイパスして端末に直接送る機能です。
これにより C-xnano^X(終了コマンド)として解釈され、正常に終了できます。

2. なぜ起きるか

vterm は Emacs のバッファ上で動く端末エミュレータです。
キー入力は原則として Emacs が先に受け取るため、C-xnano ではなく Emacs のコマンドプレフィクスとして解釈されます。
そのため、nano には届きませんでした。

同じ状況が繰り返し起きるなら、vterm-mode-map にキーを割り当てておくと便利です。

(define-key vterm-mode-map (kbd "C-q") #'vterm-send-next-key)
Code language: PHP (php)

たとえば、この設定後は C-q (quoteの意味)に続けて送りたいキーを押すだけで、任意のキーを端末に素通しできます。
nano^X なら C-q C-xvimEsc が必要な場面でも同様に使えます。

vtermnanovim を併用するなら、この一行を init ファイルに入れておくことを勧めます。