邪恶模式和正则表达式中的Emacs

时间:2014-02-18 18:36:24

标签: regex emacs evil-mode

在邪恶模式下使用Emacs,我遇到包含\_的正则表达式的问题,例如。

/TAG1\_.\{-}TAG2
/TAG1\_s*TAG2

例如,Vim中使用第一个常规表达来查找TAG1TAG2之间的任何文本块,包括空格和新行。它会匹配,例如

TAG1
text

more text TAG2

但是,在Emacs evil-mode中,只要我输入\_,就会收到Premature end of regular expression错误消息。其他 没有\_的搜索,如

/TAG1\n*TAG2

按预期工作,因此问题特别针对\_。我试图用邪恶的群体设置玩一下,但无济于事。问题可能存在的任何暗示?

P.S。:无论我是否使用GUI,问题都会发生。在Vim我没有遇到任何问题

2 个答案:

答案 0 :(得分:3)

这不是邪恶模式的问题,在emacs中,正则表达式 \ 具有特殊含义。来自emacs manual

  

\有两个函数:它引用特殊字符(包括'\'),并引入其他特殊结构。

     

因为'\'引用特殊字符,'\''是仅匹配'$'的正则表达式,'['是仅匹配'['的正则表达式,依此类推。

您必须转义 \ ,因此要搜索TAG\,您需要输入正则表达式TAG\\

您可能会发现this页面对于了解有关elisp正则表达式非常有用。

答案 1 :(得分:1)

正如您在回复@Iqbal时所说的那样,您尝试匹配TAG1,然后是零个或多个空格字符或换行字符,然后是TAG2,然后在Emacs中使用正则表达式因为这是这样写的: TAG1[ \n]*TAG2

是的,你欠你自己来阅读本手册的正则表达式部分。不同的语言处理regexp的方式不同,Emacs Lisp也不例外。