Alternatywą jest unikanie ukośników podczas wyszukiwania i zamiana długich ciągów znaków

10

Czy istnieje jakaś alternatywa w wyszukiwaniu vim i zamianie ciągów, niż konieczność ucieczki od każdego znaku specjalnego w ciągu.

Na przykład, jeśli chcę dopasować następujący ciąg i zastąpić czymś

[ERROR] Login unsucessful

Więc muszę to zrobić

:%s/\[ERROR\]\ Login\ unsucessful/something/g

I staje się o wiele bardziej brzydsze i bolesne w przypadku złożonych ciągów znaków zawierających wiele znaków specjalnych

Chciałbym zrobić coś takiego

:%s/"[ERROR] Login unsucessful"/something/g

co pozwoliłoby uniknąć ucieczki. Czy jest jakaś funkcja tego typu?

MohitC
źródło

Odpowiedzi:

16

Możesz użyć very-nomagicprzełącznika. Zobacz :h \Vszczegóły. To by ci dało %s/\V[ERROR] Login unsuccessful/something/g. Jest też nomagicprzełącznik \M, który jest lżejszą wersją \Vi nie wydaje się być powszechnie używany.

Pamiętaj też, że nie musisz uciekać spacjami, tak jak w przykładzie, nawet jeśli nie używasz \V.

PhilippFrank
źródło
Dzięki. Dokładnie to, czego chciałem. nie dostałem tego podczas wyszukiwania w Google, nie wiem dlaczego.
MohitC
2
@MohitC mapować /aby /\vwłączyć „bardzo magia” dla większości wyszukiwań, więc mam zmapowany //do /rozpocząć wyszukiwanie niezmodyfikowanej (przydatne dla przeżywa historię wyszukiwania ignorując modyfikatory) i /v/aby /\Vszybko wyłączyć wszystkie magiczne dla poszukiwań.
Kyle Strand
@MohitC W rzeczywistości moja konfiguracja jest bardziej skomplikowana, ponieważ używam również wtyczki, aby używać „bardzo magii” tak konsekwentnie, jak to możliwe we wszystkich kontekstach. Zobacz moją odpowiedź tutaj .
Kyle Strand
7

Nie musisz uciekać przed spacjami. Więc to:

:%s/\[ERROR\]\ Login\ unsucessful/something/g

powinno faktycznie być:

:%s/\[ERROR\] Login unsucessful/something/g

I oczywiście możesz włączyć bardzo nomagiczny „tryb”, aby te znaki specjalne były mniej wyjątkowe:

:%s/\V[ERROR] Login unsucessful/something/g

Zobaczyć :help /magic.

romainl
źródło
2

Oprócz flag nomagicznych wspomnianych w innych odpowiedziach.

Często zdarza się, że nie musisz precyzować swojego ciągu wyszukiwania

Na przykład, aby dopasować

[ERROR] Login unsucessful

Możesz użyć tego wyrażenia

.ERROR. Login unsucessful

Oczywiście musisz wiedzieć, że twoje dane nie będą zawierać innych ciągów, różniących się od zamierzonego celu, ale pasujących do wyrażenia.

RedGrittyBrick
źródło