Emacs で isearch キーを再バインドする際の問題

Emacs で isearch キーを再バインドする際の問題

こんにちは。Cs は保存にバインドされているため、Emacs の isearch キー (Cs) を Ci のような CUA キーに再バインドしようとしています。次の操作を実行しました。

(global-set-key "\C-i" 'isearch-forward)
(global-set-key (kbd "C-S-i") 'isearch-backward)

これは、次の一致を見つけようとするまでは正常に動作します。問題は、Emacs では、これを Cs をもう一度入力することで実行することです。残念ながら、isearch-repeat-forward コマンドを Ci にバインドすることはできません。これは、Ci の isearch-forward へのバインドが解除されるためです。

おそらく、繰り返しにCrのようなものを気にしないと思いますが、面倒なことに、emacsには前方と後方の増分検索に異なる繰り返しコマンドがあります。

これに対する良い解決策を知っている人はいますか?

答え1

isearch-repeat-forwardC-sにバインドされています検索モードC-sを押すと、バッファに新しいマイナーモードが入ることに気づくでしょう。各モードには独自のキーバインドマップがあるため、C-sこのマップのバインドを変更する必要があります。define-key関数は、キーにバインドしたいモードマップを引数として受け取りますisearch-mode。これをinit.el

(define-key isearch-mode-map (kbd "C-i") 'isearch-repeat-forward)
(define-key isearch-mode-map (kbd "C-S-i") 'isearch-repeat-backward)

関連情報