Emacs'ta normal ifadelerle arama ve değiştirme işlemlerini nasıl pratik yapabilirim?


12

Düzenli ifadeler kullanarak arama ve değiştirme, Emacs kullanıcısı için bu işlemleri rutin olarak gerçekleştirebilen açık bir şekilde güçlü bir araçtır. Bununla birlikte, bir Emacs (ve / veya programlama) acemi olarak, düzenli ifadelerin öğrenilmesi ve uygulanması gerekir.

Yerleşik Emacs öğreticisine benzer şekilde Emacs'ta düzenli ifadeleri etkileşimli olarak öğrenebilir ve eğitebilir miyim ? Değilse, arama ve değiştirme için düzenli ifadelerin kullanımını uygulamak için Emacs'ı kullanmak için başka öneriler nelerdir?


1
Bu dokümantasyon tamamlandı: wikemacs.org/wiki/Regexp
Ehvince

Yanıtlar:



16

M-x regexp-builder RETHangisinin etkileşimli bir düzenli ifade eşleştiricisi olduğunu deneyebilirsiniz , bu kötü değil


7
C-gBeklediğiniz gibi çıkmadığında panik yapmayın . C-c C-qalıştırma yaptığınızda regexp oluşturucusundan çıkmak için varsayılan tuş bağlamadır.
nispio

5

Kullandığım regexp-builderetkileşimli düzenli ifadeleri ve geri bildirim almak deney yapalım hangi. Ve elbette, bunu kullanmaya başladığımda, hemen kendime "Bu normal ifadeyi nasıl beslerim query-replace-regexp?" Diye sordum.

Seçtiğim cevap EmacsWiki ReBuilder sayfasında tanımlanan aşağıdaki işlevdir .

(defun reb-query-replace (to-string)
  "Replace current RE from point with `query-replace-regexp'."
  (interactive
   (progn (barf-if-buffer-read-only)
          (list (query-replace-read-to (reb-target-binding reb-regexp)
                                       "Query replace"  t))))
  (with-current-buffer reb-target-buffer
    (query-replace-regexp (reb-target-binding reb-regexp) to-string)))

Yani benim iş akışım:

  1. M-x re-builder
  2. türü türü türü
  3. M-x reb-query-replace

3

Normal ifadelerin hangi bölümleriyle (özellikle normal ifadeler grubu) eşleştiğini görmek için normal ifadeleri kullanmayı öğrenirken çok büyük bir yardımcı olabilir. Ve bunu interaktif ve aşamalı olarak yapmak.

@ İmmerr cevabı çizgisinde Icicles arama benzer olmuştur vurgulama uzun süre.

resim açıklamasını buraya girin



1

Emacs içinde değil, ancak http://rubular.com/ temelde regexp-builderbir hile sayfası ile. Bir örnek oluşturabilir ve bu örneğe bir bağlantı vermesini sağlayabilirsiniz. Bunu bir ekiple normal ifadeyi tartışırken kullanıyorum.


1
Ruby emacs aromalı Regexp kullanıyor mu?
nispio

1

Dave F'lere alternatif olarak regexp-builder, desen eşleşmesini uygulamak için rastgele metin de oluşturabilirsiniz.

Bu komutun en kullanışlı özelliği, doğru desen eşleşmelerini sağlamanıza yardımcı olmak için desen oluşturuldukça arabellekteki eşleşmeleri vurgulamasıdır.

(query-replace-regexp)( C-M-%) Kullanmak ve istediğiniz değiştirme işlemini gerçekleştirmek için düzenli bir ifade oluşturmak pratik yapmanıza yardımcı olacaktır.


Bu regexp-builder, zaten sunmayan düzenli ifadeleri "uygulamak" isteyen birine ne gibi bir yarar sağlar ? Sorun, tüm bir query-replace-regexpnormal ifadeyi yazmanız ve ardından neyle eşleştiğini öğrenmek için taahhütte bulunmanızdır. Eğer sonucu beğenmediyseniz baştan başlamanız gerekir. regexp-builderne yaptığınızı bilmiyorsanız çalışana kadar normal ifadenizi değiştirmeyi kolaylaştıran maçları anında gösterir.
nispio

1
Kabul ediyorum bunun dezavantajı. Bununla birlikte, düzenli ifadeleri kullanmayı query-replace-regexpbiliyorsanız, özellikle Emacs'ta kullanmaya alışacaksınız
Jonathan Leech-Pepin

Belki ... ama OP'nin istediği şeyle uyuşmuyor gibi görünüyor. "Eğer düzenli ifadelere aşina iseniz", o zaman düzenli ifadeleri öğrenmenize hiç gerek yoktur .
nispio

1
OP, Emacs acemi olarak etkileşimli olarak nasıl / ne zaman kullanılacağını nasıl öğreneceğini soruyor . Diğer regexp türlerinden bazı regexp bilgilerine zaten sahip olabilirler.
Jonathan Leech-Pepin
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.