Функция regexp-opt отсутствует в Emacs? - PullRequest
2 голосов
/ 27 сентября 2010

Я начал играть с elisp, чтобы создавать блокировки шрифтов (подсветку синтаксиса) в Emacs.В большинстве уроков упоминается использование функции elisp "regexp-opt" для оптимизации регулярных выражений, но моя версия emacs (23.2), похоже, не имеет этой функции.Кроме того, поиск в Google не дает полезных результатов.Есть идеи?

Ответы [ 3 ]

6 голосов
/ 27 сентября 2010

Как вы можете узнать через C-h f regexp-opt:

regexp-opt - это скомпилированная функция Lisp.

(строки regexp-opt и необязательный пара)

Возвратите регулярное выражение, чтобы соответствовать строке в списке строк.Каждая строка должна быть уникальной в строках и не должна содержать регулярных выражений в кавычках или нет.Если необязательный атрибут не равен nil, убедитесь, что возвращаемое регулярное выражение заключено хотя бы в одну группирующую конструкцию регулярного выражения.Возвращенное регулярное выражение, как правило, более эффективно, чем эквивалентное регулярное выражение:

(let ((open (if paren "\ (" "")) (close (если paren "\)" "")))
(concat open (mapconcat 'regexp-quote-strings "\ |") close))

Если paren равно `words', то полученное регулярное выражение дополнительно окружено \ .

Обратите внимание, что это функция, которая будет использоваться в коде на Лиспе, а не интерактивная команда, которую вы можете запустить с помощью M-x

5 голосов
/ 27 сентября 2010

regexexp-opt - это функция elisp, но не команда emacs. Вот почему вы не можете выполнить его, выполнив: M-x regexp-opt

Однако вы можете выполнить любую функцию elisp из оболочки elisp. Наберите M-x eshell. И из этой оболочки вы можете запустить regexp-opt

0 голосов
/ 21 октября 2013

Как уже говорили другие, regexp-opt не является командой (поэтому вы не можете вызвать ее с помощью M-x).Но вы можете вызвать его приложение в интерактивном режиме, используя M-:.

Например, M-: (regexp-opt '("foo" "toto" "blat" "total" "mistral")) RET возвращает регулярное выражение "\\(?:blat\\|foo\\|mistral\\|tot\\(?:al\\|o\\)\\)".

...