如何使用特定的正则表达式将Emacs命令定义为“query-replace-regexp”

时间:2016-08-19 13:18:19

标签: regex emacs

我正在尝试向我的init文件添加命令,但这两件事似乎都不起作用:

我想保存这个正则表达式:

Query replace regexp (default \([A-Z]\{3,\} ?[A-Z]+\) -> `\1`)

在我的init文件中,我尝试添加:

(defun to-inline-code ()
   (interactive)
   (query-replace-regexp 
       "\([A-Z]\{3,\} ?[A-Z]+\)"
       "`\1`" 
       nil 
       1
       (point-marker) (point-max)))

但是当我执行to-inline-code时,它不起作用。

我也试过了:

(defun to-inline-code ()
   (interactive)
   (query-replace-regexp 
       "\([A-Z]\{3,\} ?[A-Z]+\)"
       "`\1`" ))

同样的运气。

1 个答案:

答案 0 :(得分:1)

你需要引用字符串中的反斜杠:

(defun to-inline-code ()
   (interactive)
   (query-replace-regexp 
       "\\([A-Z]\\{3,\\} ?[A-Z]+\\)"
       "`\\1`" 
       nil 
       1
       (point-marker) (point-max)))

即。为每个\\\

xy ABCD CC 5上,这使得它匹配一个表达式并回答是给出

xy A`BCD CC` 5 

可能是也可能不是您要找的东西。我怀疑你需要一个略有不同的正则表达式。

您可以通过键入交互式verison C-M-% ....(即M-x query-replace-regexp)然后要求使用C-x ESC ESC重复该命令来查看迷你缓冲区中命令的较长形式(即{{ 1}})。