Ah evet. Isearch, yazdığınız tuşları okur, arar ve geçerli arabellekteisearch-mode-map
çağırır .
ISearch yapar değil , görünüşe rağmen, minibuffer kullanın. Yankı alanını kullanır. Yani, gördüğünüz şey aslında yazdığınız karakterlerin yankıları da dahil olmak üzere çıktı mesajlarıdır.
İstediğinizi yapmalısınız:
(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)
(BTW, sorunuz delete
karakteri söylüyor , ancak DEL
geri karakter olan yazdınız.)
@Malabarba bir yorumda belirttiği gibi, yeni arama dizesini ""
(boş dize) olarak ayarladığınızda, with-isearch-suspended
boş bir arama dizesiyle başlayarak son arama dizesini arayarak devam eder.
Bu genel olarak bir " özelliktir " with-isearch-suspended
. Bazen gerçekten sürümünde, tekrar başlatılması için arama dizesini boşaltmak isteyebilirsiniz çünkü with-isearch-suspended
içinde ISearch + .el ben ekledim değişken isearchp-if-empty-prefer-resuming-with-last
, bunu kontrol etmek. Bunu bağlarsanız nil
ve olarak ayarlarsanız isearch-new-string
, ""
arama işlemi boş bir arama dizesiyle devam eder.
Yani Isearch + ile bu tanımla istediğinizi yapabilirsiniz:
(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 "")))))
Ben de şimdi Emacs 24.4 ben bulundum gerilemesine tanıttı fark Emacs hata # 20466 için, bağlayıcı anlama geldiğini DEL
de isearch-mode-map
yeterli değildir. Bir bağlayıcı ayrı ilave <backspace>
için bir ek olarak, DEL
. Bu , Isearch için <backspace>
artık çevrilmediği anlamına gelir DEL
(ancak yine de genellikle Emacs için bu şekilde tercüme edilir).
Yani Geri tuşu Emacs 24.4 sordu ya da geç o zaman sadece bağlamaz ne yapmak istiyorsanız DEL
için mydelete
. Bağlanman <backspace>
gerek mydelete
. Aptal, AFAICT, n'arrete pas le progres üzerinde mais ...
I benzer bir komutu ekledik ISearch + ve bunu bağlanan C-M-l
(bir tamamlama uyumsuzluğu kaldırmak için kullanılan aynı anahtar Icicles ).
Çok unutmayın C-g
bir uyumsuzluk olduğunda ISearch de, eşleşmeyen metni kaldıracaktır. (Ancak C-g
arama başarılı olduğunda da bir etkisi vardır.)
Bunu bahsetmeliydik ISearch + Ayrıca artık uzunca bir süre benzer çizgiler boyunca isteğe bağlı bir davranış olmuştur. M-k
Isearch sırasında, seçeneğin değeri tarafından kontrol edilen 3 davranış arasında geçiş yapar isearchp-drop-mismatch
:
replace-last
- Geçerli girişiniz, en son eşleşmeyen metnin yerini alır. Bir uyumsuzluk olsa bile her zaman son girdinizi görebilirsiniz. Ve kullanarak düzenleme için kullanılabilir M-e
.
nil
- Önceki girişinizde eşleşmeyen bir bölüm olsa bile geçerli girişiniz eklenir.
başka bir şey - Uyumsuzluğa neden olursa geçerli girişiniz yok sayılır (kaldırılır). Arama dizesi her zaman başarılı eşleşmelere sahiptir.