2010-09-26 38 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\\)\\)"