2010-09-26 9 views
2

J'ai commencé à jouer avec elisp pour créer des font-locks (coloration syntaxique) dans Emacs. La plupart des tutoriels mentionnent l'utilisation d'une fonction elisp "regexp-opt" pour optimiser les expressions régulières, mais ma version d'emacs (23.2) ne semble pas avoir cette fonction. En outre, googler pour la réponse ne semble pas donner de résultats utiles. Des idées?Fonction regexp-opt manquante dans Emacs?

+0

Quelle est l'erreur que vous obtenez? Je cours emacs 23.2 et j'ai la fonction. –

+0

M-x regexp-opt => [aucune correspondance] – rehanift

Répondre

6

Comme vous pouvez le découvrir via C-h f regexp-opt:

regexp-opt est une fonction Lisp compilé.

(chaînes regexp-opt & paren en option)

Retour une expression rationnelle dans une chaîne les chaînes de la liste. Chaque chaîne doit être unique dans les chaînes et ne doit pas contenir aucune expression rationnelle, cité ou non. Si le paramètre facultatif est non-nul, assurez-vous que indique que l'expression rationnelle renvoyée est incluse par au moins une construction de regroupement rationnel . Le retour regexp est généralement plus efficace que le regexp équivalent:

(soit ((ouverte (si paren "\ (" "")) (près (si paren "\)" "")))
(concat ouvert (mapconcat 'regexp-citation chaînes "\ |") fermer))

Si paren est `mots', le regexp qui en résulte est en outre entouré \ < et>.

Notez qu'il est une fonction à utiliser dans le code Lisp, pas une commande interactive que vous pouvez exécuter avec M-x

5

regexexp-opt est une fonction elisp mais pas une commande emacs. C'est pourquoi vous ne pouvez pas l'exécuter en exécutant: M-x regexp-opt

Cependant, vous pouvez exécuter n'importe quelle fonction elisp à partir du shell elisp. Tapez M-x eshell. Et à partir de ce shell, vous pouvez exécuter regexp-opt

0

Comme d'autres l'ont dit, regexp-opt n'est pas une commande (donc vous ne pouvez pas l'appeler en utilisant M-x). Mais vous pouvez invoquer une application de manière interactive, en utilisant M-:. Par exemple, renvoie l'expression rationnelle "\\(?:blat\\|foo\\|mistral\\|tot\\(?:al\\|o\\)\\)".