Emacs中缺少regexp-opt功能?

时间:2010-09-26 22:51:37

标签: emacs elisp

我开始使用elisp在Emacs中创建字体锁(语法高亮)。大多数教程都提到使用elisp函数“regexp-opt”来优化正则表达式,但我的emacs版本(23.2)似乎没有这个功能。此外,谷歌搜索答案似乎没有出现有用的结果。有什么想法吗?

3 个答案:

答案 0 :(得分:6)

您可以通过C-h f regexp-opt找到:

  

regexp-opt是一个已编译的Lisp   功能

     

(regexp-opt strings& optional paren)

     

返回正则表达式以匹配字符串   列表字符串。每个字符串应该   在字符串中是唯一的,不应该   包含任何引用或引用的正则表达式。   如果可选的paren是非零的,请确保   包含返回的正则表达式   通过至少一个正则表达式分组   构造。返回的正则表达式是   通常比效率更高效   等效的正则表达式:

     

(let((open(如果paren“\(”“”))   (关闭(如果paren“\”“”“))))   (concat open(mapconcat'regexp-quote   字符串“\ |”)close))

     

如果paren是'words',那么   结果是regexp   被\包围和>。

注意,它是一个在Lisp代码中使用的函数,而不是可以使用M-x运行的交互式命令

答案 1 :(得分:5)

regexexp-opt是一个elisp函数,但不是emacs命令。这就是为什么你不能通过运行来执行它:M-x regexp-opt

但是,您可以从elisp shell执行任何elisp函数。输入M-x eshell。从这个shell你可以运行regexp-opt

答案 2 :(得分:0)

正如其他人所说,regexp-opt不是命令(所以你不能使用M-x调用它)。但您可以使用M-:以交互方式调用它的应用程序。

例如,M-: (regexp-opt '("foo" "toto" "blat" "total" "mistral")) RET会返回正则表达式"\\(?:blat\\|foo\\|mistral\\|tot\\(?:al\\|o\\)\\)"