Поиск строки, игнорируя новые строки


11

Я привык писать файлы, где абзацы разбиты на несколько строк, например, с помощью fill-column. Когда я ищу строку ( C-s), например this is a long text, результаты поиска не будут возвращать места, где строка появляется с разрывом строки между двумя словами (например this\nis a long text).

Есть ли команда, которая также вернула бы эти результаты?

Ответы:


11

Посмотрите на переменные isearch-lax-whitespace, isearch-regexp-lax-whitespaceи search-whitespace-regexp.

Если первые две переменные имеют значение, отличное от nil (например t), любой пробел в вашей строке поиска будет соответствовать любой последовательности, соответствующей регулярному выражению, определенному search-whitespace-regexpпеременной.

Чтобы сопоставить слова через разрывы строк, сделайте это:

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

Пробел в вашем запросе теперь будет соответствовать любому пробелу, табуляции или переносу строки любое количество раз.


Спасибо, но это не работает для меня. Моя версия Emacs - 23.4.1. По-видимому, у него нет переменной «isearch-lax-whitespace».
Тони

1
Да, эти функции были введены в Emacs 24.3. Есть ли шанс перейти на более свежую версию? Версии 23.4.1 уже более трех лет.
Rekado

2
Попробуйте isearch-forward-word, что связано с M-s wнедавним Emacs.
политза

Emacs 23 не работает для меня, убедитесь, что вы используете 24.
ragerdl
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.