Büyük / küçük harfe duyarlı sorgu değiştirme nasıl yapılır?


16

Ben tarafından M-x query-replacetüm oluşumları değiştirmek için yaptığımda , aynı zamanda (büyük harf ) ile eşleşir . Emacs'ı yalnızca küçük harf bulmaya zorlamak nasıl ?vwVVv


"Büyük / küçük harfe duyarlı olmayan" varsayılan durumdur ve burada büyük / küçük harf aramada önemli değildir. Yalnızca bir vakayla eşleşmek istiyorsanız, istediğiniz "büyük / küçük harfe duyarlıdır". (Ben de bir şey özledim, gerekirse düzenlemeyi geri almak için çekinmeyin)
T. Verron

@ T.Verron Şimdi ikna oldum, haklısın.
İsim

Yanıtlar:


13
(customize-set-variable case-fold-search  nil)

Ya da kendi komutunuzda bu değişkeni (isteğe bağlı), aksi takdirde sadece bir sarıcı olan bağlayın query-replace. Bunun avantajı, sorgu değiştirme dışında genel kullanım için değişken değerini değiştirmemesidir.

case-replaceDeğiştirme metni için büyük / küçük harf kullanımını kontrol eden değişkene de bakın .

Ayrıca bkz C-h f query-replaceörneğin, yazan yere:

Eşleşme, case-fold-searchnil değilse ve FROM-STRING'in büyük harf içermemesi durumunda büyük / küçük harf bağımsızdır . Eğer Değiştirme, yeni metne eski metnin durumda desenini aktarır case-replaceve case-fold-searcholmayan sıfır olan ve DAN-STRING hiçbir büyük harf vardır

Ayrıca aşağıdaki yorumlara bakın ve Emacs # 20687 hatası , burada perform-replacevaka katlama işlemini değiştirmenize nasıl izin vereceğinizi gösterir query-replace.


Mevcut kodun bu şekilde perform-replacebağlandığını case-fold-searchda unutmayın (bağlı olduğu değişkenlere dikkat edin):

(case-fold-search  (if (and case-fold-search search-upper-case)
                       (isearch-no-upper-case-p from-string regexp-flag)
                     case-fold-search))

case-fold-searchBağlamayı isearchkullanırken yapabildiğimiz gibi anında değiştirmek güzel olurdu M-c. Ancak maalesef query-replacemod haritası var.
Kaushal Modi

2
@kaushalmodi: Normalde, bunun için bir anahtar bağlama eklemek kadar basit olurdu query-replace-map: (defun toggle-case () (interactive) (setq case-fold-search (not case-fold-search)))ve (define-key query-replace-map "C" 'toggle-case). Ancak bu haritadaki tuşların kullanımı zor kodlanmıştır perform-replace. Sen isteyebilirsin M-x report-emacs-bug, almak için perform-replacedaha açık uçlu olmak kodunu, böylece tuşları haritaya eklenebilir. En azından anahtara bağlı cmd'yi çağıran bir yedek cümleye sahip olmalıdır.
Drew

Teşekkürler! Neden daha query-replace-mapönce bulamadığımdan emin değilim .
Kaushal Modi

1
Bu hata raporunu şimdi dosyaladım (# 20687 ). Çözüm bu hata raporunda: Sadece tanımladığınız anahtarı çağıran perform-replaceek bir condmadde eklemek için değiştirin query-replace-map. Yeni koşulu, tümünü yakalama şartından hemen önce koyun t. Bu yeni hüküm geçerli: (def (call-interactively def)). Daha basit olamazdı.
Drew

(customize-set-variable case-fold-search nil)hatası verir customize-set-variable: Attempt to set a constant symbol: nil. Ayrıca ben de denedim (setq case-fold-search nil)ve (setq case-replace nil)ancak sorgu hala büyük V. maç
İsim
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.