ああそう。Isearchは、入力されたキーを読み取り、それらを調べて、現在のバッファーでisearch-mode-map
呼び出します。
Isearchは、外見にもかかわらず、ミニバッファーを使用しません。エコー領域を使用します。つまり、実際に表示されるのは、入力した文字のエコーを含む出力メッセージです。
これはあなたが尋ねることをするはずです:
(defun mydelete ()
"Delete the failed portion of the search string, or the last char if successful."
(interactive)
(with-isearch-suspended
(setq isearch-new-string
(substring
isearch-string 0 (or (isearch-fail-pos) (1- (length isearch-string))))
isearch-new-message
(mapconcat 'isearch-text-char-description isearch-new-string ""))))
(define-key isearch-mode-map (kbd "DEL") 'mydelete)
(ところで、あなたの質問はdelete
文字を言いますがDEL
、あなたはバックスペース文字であると書いたのです。)
@Malabarbaがコメントで指摘しているように、新しい検索文字列を""
(空の文字列)に設定するwith-isearch-suspended
と、空の検索文字列ではなく、最後の検索文字列を検索して再開します。
これは、一般的にの「機能」ですwith-isearch-suspended
。ただし、再開のために検索文字列を空にしたい場合があるのでwith-isearch-suspended
、isearch + .elのバージョンでは、isearchp-if-empty-prefer-resuming-with-last
これを制御するためにvariableを追加しました。これをバインドしてnil
設定isearch-new-string
すると""
、検索は空の検索文字列で再開されます。
したがって、Isearch +を使用すると、この定義で必要なことを実行できます。
(defun mydelete ()
"Delete the failed portion of the search string, or the last char if successful."
(interactive)
(let ((isearchp-if-empty-prefer-resuming-with-last nil))
(with-isearch-suspended
(setq isearch-new-string
(substring
isearch-string 0 (or (isearch-fail-pos) (1- (length isearch-string))))
isearch-new-message
(mapconcat 'isearch-text-char-description isearch-new-string "")))))
Emacs 24.4がリグレッションを導入したことにも気づきました。これは、Emacsバグ#20466を提出したためです。つまり、バインディングは十分DEL
でisearch-mode-map
はありません。彼らはの<backspace>
ための1つに加えて、別のバインディングを追加しましたDEL
。つまり、Isearchの場合<backspace>
はに翻訳されなくなりますDEL
(ただし、Emacsの場合は一般的に翻訳されます)。
あなたがEmacsの24.4以降に尋ね行うにBackspaceキーをしたいのであれば、あなただけのバインドすることはできませんDEL
しmydelete
。あなたはバインドする必要があります<backspace>
しmydelete
。Dumb、AFAICT、n'arrete pas le progresのメイス ...
同様のコマンドをIsearch +に追加してバインドしましたC-M-l
(Iciclesの補完の不一致を削除するために使用したのと同じキー)。
C-g
また、Isearchでは、不一致がある場合、不一致のテキストを削除することにも注意してください。(ただしC-g
、検索が成功した場合にも効果があります。)
Isearch +も、かなり長い間、同様の線に沿ってオプションの動作があったことを述べたはずです。M-k
Isearch中に、オプションの値によって制御される3つの動作を切り替えますisearchp-drop-mismatch
。
replace-last
-現在の入力により、最後に一致しないテキストが置き換えられます。それが不一致であっても、常に最後の入力を確認できます。また、を使用して編集することもできますM-e
。
nil
-前の入力に不一致部分がある場合でも、現在の入力が追加されます。
その他-不一致が発生した場合、現在の入力は無視(削除)されます。検索文字列は常に一致します。