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\>


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.


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.


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\\>/


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 /.


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

/\/\*

1
Czym ta odpowiedź różni się od tych, które są na stronie przez blisko sześć lat?
Martin Tournoij
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.