偶尔我想替换所有类似于以下值的实例:
<BarFoo>
与之。<barfoo>
也就是说,使用正则表达式替换尖括号内的所有内容为其小写形式。
有人有一个漂亮的Lisp片段来做到这一点吗?可以安全地假设我们只处理ASCII值。如果能够编写一个通用的完整正则表达式,并且不仅仅处理尖括号的示例,则可获得额外的奖励分数。更多的奖励分数适用于使用M-x query-replace-regexp
的答案。
谢谢,
Dom
M-x query-replace-regexp
,将"<\([^>]+\)>"
作为搜索字符串,将"<\,(downcase \1)>"
作为替换文本。这适用于Emacs 22及更高版本,有关如何在替换字符串中使用Lisp表达式的详细信息,请参见Steve Yegge博客文章。(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))))
我知道这个问题很古老,但是我刚刚发现在Emacs之前版本22(我的版本是21.3.1)中如何做到这一点,而不需要定义自定义的Lisp函数:使用M-x query-replace-regexp-eval
(在this Emacs wiki page的顶部提到)作为搜索字符串,<\([^>]+\)>
作为搜索字符串,(concat "<" (downcase \1) ">")
作为替换。
这适用于任何可以定义为部分连接的替换字符串,包括未被任何函数修改的捕获组。例如:
<BarFoo baz="Quux">
标签名称可以只小写:
<barfoo baz="Quux">
<([A-Za-z]+)\([^>]*\)>
和替换(concat "<" (downcase \1) \2 ">")
(这也适用于看起来像没有属性的标签)来实现。 这与 OP 的示例也是有效的。在使用evil时,你可以简单地执行:%s/<\([^>]+\)>/<\L\1>
\L
用于将后面的所有字母变为小写,这对于query-replace-regexp
也适用。
我还没有在Emacs文档中找到相关的资料,但它似乎与这个列表相匹配:https://www.boost.org/doc/libs/1_44_0/libs/regex/doc/html/boost_regex/format/perl_format.html