Когда я редактирую документ LaTeX в vim, часто я хочу найти фразу. Поскольку у меня есть настройка LaTeX для переноса строк, иногда половина фразы будет на одной строке, а другая половина - на следующей. В таком случае поиск не находит то, что я ищу. Так например
blah blah blah hello
world blah blah blah
при поиске с помощью /hello world
я не могу найти то, что я ищу. Есть ли быстрый и простой способ изменить этот поиск, чтобы получить меня там, где я хочу быть? Или, что еще лучше, способ сообщить vim, что любой пробел (пробел, табуляция, новая строка) совпадает с пробелом в строке поиска?
hello\_s\+world
Конечно, вы можете захотеть, если между ними будет больше одного пробела.Эта проблема была решена по адресу http://vim.wikia.com/wiki/Search_across_multiple_lines . Включена функция, которая может делать то, что мне нужно.
Затем вы можете выполнить многострочный поиск,
:S hello world
и он преобразует это вhello\s\+world
и ищет его. Еще одна приятная особенность заключается в том, что это также добавит этот новый поиск в историю поиска. Это позволяет вам вернуться и изменить поиск, используяq/
при необходимости. Он также может быть использован для замены:%s//new thing/g
. Недостатком этого является то, что он не использует,incsearch
если у вас включен.источник
То, что я знаю, не сложно, но немного утомительно. Замените каждый пробел в вашем поисковом запросе следующим:
(Обратите внимание на пробел после
[
.) Это синтаксис соответствия регулярного выражения. Сломанный, это означает:[...]
означает совпадение с любым из символов в скобках.\t
это вкладка\n
это Newline...\+
означает совпадение с одним или несколькими из предыдущих.Для получения дополнительной информации о регулярных выражениях вы можете спросить vim:
источник
Я бы лично использовал
[ \t\n]*
вместо пробелов. Это будет соответствовать нулю или более '', табуляции и новой строки. Таким образом, если один экземпляр вашего шаблона поиска охватывает разрыв строки, а другой - нет, оба будут сопоставлены.источник