Jak uciec przed ukośnikami odwrotnymi i prawymi w wyszukiwaniu / wyszukiwaniu w VIM?

98

Na przykład, gdybym chciał znaleźć i zamienić na ciągi zawierające ukośniki do tyłu lub do przodu, jak można by to osiągnąć w vimie? Dziękuję Ci!

Przykłady funkcji Znajdź i zamień to: :%s/foo/bar/g

co jeśli chciałbym znaleźć wszystkie wystąpienia <dog/>i zastąpić je<cat\>

burzowiec
źródło
3
Nie jest to ściśle odpowiedź, ale prawdopodobnie powinieneś przeczytać: pomóż magii
Tom Morris
+1 Tom, ogólnie najbardziej rozsądne rozwiązanie podczas pracy z bardziej niż trywialnym wyrażeniem regularnym.
Randy Morris,
@Tom @Randy jednak ... vi --helpna moim serwerze NIE podaje wyjaśnienia ucieczki znaków specjalnych ... dlatego ludzie przychodzą do stackoverflow, aby zacząć od ...
aequalsb
@aequalsb :help magicto coś, co wpisujesz w vimie. To nie jest argument wiersza poleceń dla vima.
doubleDown

Odpowiedzi:

152

Tak samo jak w większości innych programów linuxowych zmieniasz znaczenie znaków, używając odwrotnego ukośnika:

:%s/<dog\/>/<cat\\>

Pamiętaj jednak, że zamiast tego możesz wybrać inny separator:

:%s@<doc/>@<cat\\>@

Dzięki temu nie musisz wpisywać wszystkich czasochłonnych, mylących odwrotnych ukośników we wzorach z mnóstwem ukośników.

Z dokumentacji :

Zamiast tego, /który otacza wzorzec i ciąg zastępujący, można użyć dowolnego innego znaku jednobajtowego, ale nie znaku alfanumerycznego \, "lub |. Jest to przydatne, jeśli chcesz uwzględnić /wzorzec wyszukiwania lub ciąg zastępujący.

Cascabel
źródło
2
Więc automatycznie znajdzie wybrany separator?
szturmowiec
13
Tak. Znak po znaku sjest traktowany jako separator. Nie mogę dowiedzieć się, gdzie znalazłem listę w dokumentacji, ale jestem prawie pewien, że przynajmniej /:;*%@#są prawidłowe.
Cascabel
Jest to przydatne przy zamianie \ do / w pliku z wieloma ścieżkami w stylu Windows. Dzięki.
Isaac Nequittepas
Aby dostać się do tej wiadomości w dokumentacji, użyj: h e146
jcollado
Nie miałem pojęcia, że ​​możesz zmienić separator! To jest ogromne - dzięki.
Brettins
22
%s:<dog/>:<cat>

Możesz zastąpić ograniczniki /, jeśli stają się irytujące dla niektórych wzorców.

Sarah
źródło
3
+1 za :separator. Nie wiedziałem, że możesz tego użyć. Zawsze używałem @w czasach „ucieczki”
Jeffrey Jose
8

Cytuj je odwrotnym ukośnikiem. Poza ukośnikiem często pomaga też użycie innego separatora.

 :%s#<dog/>#<cat\\>#

lub jeśli musisz użyć ukośnika jako zastępczego separatora polecenia

 :%s/<dog\/>/<cat\\>/
wallyk
źródło
3

Składnia jest następująca:

:%s/<dog\/>/<cat\\>/g
Maurizio Reginelli
źródło
2

Szukałem czegoś podobnego, aby wyszukać wartości rejestrów zawierające /znak (aby zarejestrować makro). Rozwiązaniem było wyszukanie przy użyciu ?tokena zamiast /.

Fernando
źródło
Zauważ, że ?wykona wyszukiwanie wstecz i nie jest tym samym.
Martin Tournoij
-1

ukośnik odwrotny ukośnik odwrotny gwiazdka

/(<- the prompt)\/\*

więc po wpisaniu to wygląda

/\/\*
Jim K.
źródło
1
Czym ta odpowiedź różni się od tych, które są na stronie przez blisko sześć lat?
Martin Tournoij