2009-03-24 15 views
44

Her defasında,Emacs: vakayı değiştirmek için düzenli ifade

<BarFoo> 

<BarFoo> 

<BarFoo> 

gibi değerlerin tüm örneklerini değiştirmek istiyorum, yani küçük harf eşdeğeriyle köşeli parantez içindeki tüm şeylerin yerine düzenli bir ifade yapın.

Herkesin bunu yapan bir Lisp snippet'i var mı? Sadece ASCII değerleriyle uğraştığımızı varsaymak güvenli. Tam bir düzenli ifadeyi almaya yetecek kadar genel olan ve yalnızca köşeli parantez örneğini ele almayan bonus puanları. Sadece M-x query-replace-regexp kullanan bir cevaba daha fazla bonus puan.

Teşekkürler,

Dom

cevap

64

M-x query-replace-regexp öğesini "<\([^>]+\)>" ile arama dizesi olarak ve "<\,(downcase \1)>"'i yedek olarak deneyin.

Bu, Emacs 22 ve sonraki sürümlerinde çalışmalı, Lisp ifadelerinin yedek dizede nasıl kullanılabileceği hakkında daha fazla ayrıntı için bkz. Steve Yegge blog post.

Daha önceki Emacs sürümleri için böyle bir şey deneyebilirsiniz:

(defun tags-to-lower-case() 
    (interactive) 
    (save-excursion 
    (goto-char (point-min)) 
    (while (re-search-forward "<[^>]+>" nil t) 
     (replace-match (downcase (match-string 0)) t)))) 
+6

serin bu! Emacs düzenli ifadelerinde \ 'in farkında değildim. – emk

+1

Bu, " –

+1

Regexp" <\\([^>] + \\)> "değiştirilmesinde" \ "ifadesinin geçersiz kullanımı" hatasını alır ve arama dizesi tüm büyük harflerle etiketle eşleşirse, yedek beklendiği gibi çalışmaz. –