2014-09-10 1 views
0

J'ai un fichier texte brut avec plusieurs modèles. Exemple:Emacs se produit en mode de recherche de plusieurs chaînes

DEBUG: i'm a debug line
DEBUG: Another 1
ERROR: this was an error
DEBUG: Another 2
NORMAL: EMACS
DEBUG: Another 3
ERROR: another error

L'idée est d'utiliser le mode occur pour filtrer le fichier texte avec les motifs que je veux.
Exemple: DEBUG et ERREUR. Pour autant que je sache, cela ne fonctionne qu'avec une seule entrée de chaîne ou regex.
Comment puis-je utiliser le mode d'occurrence pour filtrer plus d'un modèle de chaîne? S'il y a un autre mode Emacs pour filtrer les chaînes dans le texte, j'accepte aussi.

Répondre

1

Vous pouvez transmettre une expression rationnelle correspondant à l'une des chaînes à occur. Par exemple, tapez M-xoccurRETDEBUG\|ERROR.

+0

Exactement ce dont j'avais besoin j'ai déjà essayé cela mais sans le "\". Merci :) – lmedinas

+2

lmedinas: Meilleur que vous lisez le manuel Emacs sur la syntaxe d'expression régulière; vous trouverez probablement qu'il y a beaucoup d'autres différences par rapport à ce que vous avez l'habitude de faire, donc vous éviterez de la frustration plus tard si vous lisez à ce sujet maintenant. – phils

1

Si c'est un modèle que vous utilisez souvent, voici un peu de elisp (basé sur la réponse de legoscia):

(defun myoccur (arg) 
    (interactive "sList of space-separated args: ") 
    (occur (s-replace " " "\\|" arg)) 
) 

il remplace les espaces blancs avec la construction OR regexp et les appels se produisent.

ps: s-replace n'est pas standard. Vous avez besoin de la bibliothèque s.el. https://github.com/magnars/s.el

+0

's-replace' n'est pas standard. – phils

+0

True. En regardant son implémentation, c'est un wrapper autour de '(remplacer-regexp-in-string (regexp-quote-remplacer) new-string base-string t t))' – Ehvince