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