2010-09-26 34 views
2

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

+0

你得到的错误是什么?我运行emacs 23.2,我有这个功能。 – 2010-09-26 22:56:54

+0

M-x regexp-opt => [不匹配] – rehanift 2010-09-26 22:59:08

回答

6

正如你可以通过C-h f regexp-opt发现:

正则表达式-opt是一个编译Lisp的 功能。

(正则表达式,选择字符串&可选的括号)

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

(让((打开(如果括号 “\(” “”)) (接近(如果括号 “\)”, “”)))
(开放的concat(mapconcat '的regexp引号 字符串 “\ |”)接近))

如果括号是`词语',则 所得的regexp是另外 通过\ <和>包围。

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

5

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

但是,你可以从elisp shell执行任何elisp函数。键入M-x eshell。从这个shell中你可以运行正则表达式

0

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

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