Kiedy edytuję dokument LaTeX w vimie, często chcę wyszukać frazę. Ponieważ mam konfigurację LaTeX do zawijania linii, czasami połowa frazy będzie w jednej linii, a druga połowa w następnej. W takim przypadku wyszukiwanie nie pozwala znaleźć tego, czego szukam. Na przykład
blah blah blah hello
world blah blah blah
podczas wyszukiwania za pomocą /hello world
nie znajduję tego, czego szukam. Czy istnieje szybki i łatwy sposób zmodyfikować to wyszukiwanie, aby dostać się tam, gdzie chcę być? A może jeszcze lepiej, aby powiedzieć vimowi, aby dopasował dowolne białe spacje (spację, tabulator, nową linię) do spacji w ciągu wyszukiwania?
hello\_s\+world
między nimi była więcej niż jedna biała spacja.Ten problem rozwiązano na stronie http://vim.wikia.com/wiki/Search_across_multiple_lines . Zawarta jest funkcja, która może zrobić to, czego potrzebuję.
Następnie możesz przeprowadzić wyszukiwanie wieloliniowe za pomocą,
:S hello world
a to przekonwertuje jehello\s\+world
i wyszuka. Kolejną fajną funkcją jest to, że doda to nowe wyszukiwanie do historii wyszukiwania. Dzięki temu możesz cofnąć i zmodyfikować wyszukiwanie, używając wq/
razie potrzeby. Można go również wykorzystać do zastąpienia:%s//new thing/g
. Wadą tego jest to, że nie działa,incsearch
jeśli masz włączone.źródło
To, co znam, nie jest trudne, ale jest trochę nudne. Zastąp wszystkie spacje w zapytaniu następującym:
(Zwróć uwagę na spację po
[
.) Jest to składnia dopasowywania wyrażeń regularnych. W rozbiciu oznacza:[...]
oznacza dopasowanie dowolnej z listy znaków w nawiasach.\t
jest Tab\n
jest Newline...\+
oznacza dopasowanie jednego lub więcej poprzednich.Aby uzyskać więcej informacji na temat wyrażeń regularnych, możesz zapytać vima:
źródło
Osobiście użyłbym
[ \t\n]*
zamiast spacji. To dopasuje zero lub więcej „”, tabulatora i nowej linii. W ten sposób, jeśli jedno wystąpienie wzorca wyszukiwania obejmuje podział linii, a inne nie, oba zostaną dopasowane.źródło