每隔一段时间我就想替换所有值的实例,例如:
<BarFoo>
与
<barfoo>
即。使用小写等效项替换尖括号内的所有内容。
任何人都有一个很好的Lisp片段吗?假设我们只处理ASCII值是安全的。任何通用的足以获得完整正则表达式的奖励点,并不只是处理尖括号示例。更多奖励指向仅使用M-x query-replace-regexp
的答案。
谢谢,
的Dom
答案 0 :(得分:74)
尝试M-x query-replace-regexp
,"<\([^>]+\)>"
作为搜索字符串,"<\,(downcase \1)>"
作为替代。
这应该适用于Emacs 22及更高版本,请参阅此Steve Yegge blog post以获取有关如何在替换字符串中使用Lisp表达式的更多详细信息。
对于早期版本的Emacs,您可以尝试这样的事情:
(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))))
答案 1 :(得分:0)
我意识到这个问题很古老,但我刚刚发现如何在 Emacs 之前 22 版(我的版本是 21.3.1)中做到这一点,而无需定义自定义 Lisp 函数:使用 { {1}}(在 this Emacs wiki page 的顶部提到),其中 M-x query-replace-regexp-eval
作为搜索字符串,<\([^>]+\)>
作为替换。
这应该适用于任何可以定义为部分串联的替换字符串,包括未被任何函数修改的捕获组。例如:
(concat "<" (downcase \1) ">")
可以只将标签名称小写:
<BarFoo baz="Quux">
通过使用搜索字符串 <barfoo baz="Quux">
和替换 <\([A-Za-z]+\)\([^>]*\)>
(这也适用于看起来像没有属性的标签的 OP 示例)。