2009-11-06 12 views
48

w vi, wyszukaj i zamień, w jaki sposób uciekniesz z "/" (ukośnik w przód), aby był poprawny. Powiedz na ścieżce./in vi Wyszukaj i zamień?

jak:/Użytkownicy/tom/Dokumenty/plików PDF/

:%s//Users/tom/documents/pdfs//<new text>/g --FAILS (obviously) 

:%s/\/Users/tom/documents/pdfs\//<new text>/g -- FAILS with a trailing error 

:%s/'/Users/tom/documents/pdfs/'/<new text>/g -- FAILS with a trailing error 

Czego mi brakuje?

+1

Możliwy duplikat [W jaki sposób można uciec przed ukośnikami i ukośnikami w wynikach wyszukiwania/wyszukiwania VIM?] (Http://stackoverflow.com/questions/2465156/how-does-one-escape-backslashes-and-forward-slashes -in-vim-find-search) – Pureferret

Odpowiedz

55

Musisz również uciec od wewnętrznych ukośników.

:%s/\/Users\/tom\/documents\/pdfs\//<new text>/g 
+0

@Sarah - Doh! Tak dziękuję! –

96

Alternatywnie można zrobić :%s,foo/bar/baz,foo/bar/boz,g - prawie nigdy użycie tnie z powodu zamieszania ucieczkę.

+0

Stary, nie wiedziałem o tym! Zgaduję, że mógłbyś użyć dowolnego znaku, aby oddzielić pola? –

+0

Tak, wierzę w to, po prostu przyzwyczaiłem się do przecinków. –

+0

Pokonałeś mnie o kilka sekund :) – Bob

14

Jak zasugerowała Sarah, musisz uciec z WSZYSTKICH ukośników.

Zamiast tego możesz użyć innej postaci oprócz ukośnika do przodu jako ogranicznika. Jest to przydatne, jeśli twój ciąg wyszukiwania zawiera wiele ukośników.

:%s#/Users/tom/documents/pdfs/#<new test>#g 

Działa to doskonale w vim. Nie jestem w 100% pewny co do wanilii vi.

+0

Nie mogę sobie wyobrazić, w jaki sposób udało ci się dostać na vi. Myślałem, że większość głównych dystrybucji Linuksa przekierowuje 'vi' do vima z wieloma funkcjami wyłączonymi. –

+2

Ponieważ linux nie jest jedynym os :) Wiele BSD dostarczanych jest z vanilla vi lub nvi Większość komercyjnych systemów unix również. Pamiętam (nieszczęśliwie) dni, kiedy musiałem skompilować vima w IRIX-ie, ponieważ nie mogłem żyć z wanilią vi. – Bob

+0

Nie tak dawno temu Debian połączył vi z nvi, podobnie jak NetBSD, FreeBSD i OpenBSD. Niektóre dostarczane są również z vim-as-vim. – DigitalRoss

3

Wiem, że to pytanie ma kilka lat, ale dla innych, którzy mogą wylądować na tym poszukiwaniu łatwiejszego rozwiązania, w 2014 roku można zastąpić ogranicznik "/" czymś innym, jak "!", O ile robisz to z przodu, pośrodku iz powrotem, tak:

:%s!foo/bar/baz!foo/bar/boz!g 

Bardzo simiar do odpowiedzi Meder za ... Ale uważam, że wykrzyknik jest o wiele łatwiejsze do wyświetlenia jako separator. Chciałem tylko potwierdzić, że ta metoda nadal działa w obecnej wersji VIM, której używam w Mac OSX Mavericks.

2

Można użyć ? szukać

W przypadku poszukiwania wzorca w rejestrze, a wzór zawiera znak „/”, można po prostu użyć polecenia ? zamiast polecenia / z trybu normalnego do rozpoczęcia pasujące do wzorca . W takim przypadku nie ma więcej ucieczki wymaganej dla znaku "/". (jednak musisz teraz uciec "?" char)

? będzie szukać w przeciwnym kierunku niż /, więc jeśli nie masz nic przeciwko kierunkowi wyszukiwania, a Twój wzór wyszukiwania nie zawiera "?" zwęglać. Ponadto należy sprawdzić skrypt escape(), jeśli chcesz więcej.

+0

Geniusz! Właśnie szukałem (z '/') i nie zastępowałem, więc nie miałem separatora do zmiany. – Noumenon