在邪恶模式下使用Emacs,我遇到包含\_
的正则表达式的问题,例如。
/TAG1\_.\{-}TAG2
/TAG1\_s*TAG2
例如,Vim中使用第一个常规表达来查找TAG1
和TAG2
之间的任何文本块,包括空格和新行。它会匹配,例如
TAG1
text
more text TAG2
但是,在Emacs evil-mode中,只要我输入\_
,就会收到Premature end of regular expression
错误消息。其他
没有\_
的搜索,如
/TAG1\n*TAG2
按预期工作,因此问题特别针对\_
。我试图用邪恶的群体设置玩一下,但无济于事。问题可能存在的任何暗示?
P.S。:无论我是否使用GUI,问题都会发生。在Vim我没有遇到任何问题
答案 0 :(得分:3)
这不是邪恶模式的问题,在emacs中,正则表达式 \ 具有特殊含义。来自emacs manual
\有两个函数:它引用特殊字符(包括'\'),并引入其他特殊结构。
因为'\'引用特殊字符,'\''是仅匹配'$'的正则表达式,'['是仅匹配'['的正则表达式,依此类推。
您必须转义 \ ,因此要搜索TAG\
,您需要输入正则表达式TAG\\
您可能会发现this页面对于了解有关elisp正则表达式非常有用。
答案 1 :(得分:1)
正如您在回复@Iqbal时所说的那样,您尝试匹配TAG1
,然后是零个或多个空格字符或换行字符,然后是TAG2
,然后在Emacs中使用正则表达式因为这是这样写的:
TAG1[ \n]*TAG2
。
是的,你欠你自己来阅读本手册的正则表达式部分。不同的语言处理regexp的方式不同,Emacs Lisp也不例外。