2009-10-21 11 views
5

Mam następujący tekst w pliku tekstowymvim regex z meta-znaków

This is some text for cv_1 for example 
This is some text for cv_001 for example 
This is some text for cv_15 for example 

Próbuję użyć wyrażenia regularnego cv_.*?\s dopasować cv_1, cv_001, cv_15 w tekście. Wiem, że działa regex. Jednak nie pasuje do niczego, gdy próbuję go w VIM.

Czy potrzebujemy zrobić coś specjalnego w VIM?

+1

Łatwy sposób sprawdzenia, co jest nie tak, to włączyć ': set incsearch'. Zobaczysz, że wyszukiwanie nagle nie pasuje podczas wpisywania znaku zapytania. –

Odpowiedz

13

The perl non-chciwy "?" char nie działa w vim, należy użyć:

cv_.\{-}\s 

Zamiast

cv_.*?\s 

Oto niektóre szybkie odniesienie do dopasowania: składnia regex

* (0 or more) greedy matching 
\+ (1 or more) greedy matching 
\{-} (0 or more) non-greedy matching 
\{-n,} (at least n) non-greedy matching 
+0

'% s/cv _. \ {-} \ ze \ s/zamiennik/g' –

+2

' \ ze' kończy mecz przed znakiem odstępu, więc nie zostaje zastąpiony –

+0

To zadziałało świetnie, dlaczego nie? markować pracę w vim? Wydaje mi się to dziwne. – wallerjake

4

Vima jest nieco inna - - To, czego szukasz, to:

cv_.\{-}\s 

(\{-} będący odpowiednikiem vima perl'a *?, tj. Nieagrzecznego 0 lub więcej). Zobacz here dla dobrego samouczka na temat wyrażeń regularnych vim.

+0

Twój link, podobnie jak wiele linków Geocities, jest zepsuty :( –