Rechercher une chaîne ignorant les nouvelles lignes

11

J'ai l'habitude d'écrire des fichiers où les paragraphes sont divisés en plusieurs lignes, par exemple avec fill-column. Lorsque je recherche une chaîne ( C-s) telle que this is a long text, les résultats de la recherche ne renvoient pas les emplacements où la chaîne apparaît avec un saut de ligne entre deux des mots (comme this\nis a long text).

Existe-t-il une commande qui retournerait également ces résultats?

Tony
la source

Réponses:

11

Jetez un oeil à des variables isearch-lax-whitespace, isearch-regexp-lax-whitespaceet search-whitespace-regexp.

Si les deux premières variables sont définies sur quelque chose de non nul (par exemple t), n'importe quel caractère espace dans votre chaîne de recherche correspondra à n'importe quelle séquence correspondant à l'expression régulière définie par la search-whitespace-regexpvariable.

Pour faire correspondre les mots entre les sauts de ligne, procédez comme suit:

(setq isearch-lax-whitespace t)
(setq isearch-regexp-lax-whitespace t)
(setq search-whitespace-regexp "[ \t\r\n]+")

Un caractère espace dans votre requête correspondra désormais à n'importe quel espace, tabulation ou saut de ligne autant de fois que nécessaire.

rekado
la source
Merci, mais ça ne marche pas pour moi. Ma version Emacs est 23.4.1. Apparemment, il n'a pas de variable "isearch-lax-whitespace".
Tony
1
Oui, ces fonctionnalités ont été introduites dans Emacs 24.3. Une chance de passer à une version plus récente? La version 23.4.1 a déjà plus de trois ans.
rekado
2
Essayez isearch-forward-word, ce qui est lié aux M-s wrécents Emacs.
politza
Emacs 23 n'a pas fonctionné pour moi, assurez-vous que vous en utilisez 24.
ragerdl