2012-05-17 17 views
16

Aby zastąpić każde wystąpienie „&” na „& &” w zakresie od aktualnej linii 30 więcej linii na, ja wydać :.,+30s/\\&/\\&\\&/g ale Vim mówi „Wzór nie znaleziono ". Unikam specjalnego znaku "&" podwójnym podwójnym ukośnikiem "\".vim: wyszukiwania i zamiany na „&”

Odpowiedz

13

Spróbuj nie uciekać przed wszystkim - :.,+30s/&/&&/g wydaje się działać dla mnie.

+12

Wyjaśnienie: nie dzieje się tak dlatego, że '&' nie jest metaznakiem: podczas gdy we wzorze jest prawdą (chyba że '&' zostało usunięte lub włączony był tryb bardzo magiczny), w łańcuchu zamiennym '& 'oznacza to samo co' \ 0': cały dopasowany podciąg. Ponieważ "cały dopasowany podciąg" jest sam w sobie ampersandem, to rozwiązanie działa. Zauważ również, że jeśli opcja "magic" była wyłączona, instrukcja "& w zastępstwie reprezentuje cały dopasowany wzór" ma wartość false w wielu poleceniach, w tym ': s'. – ZyX

10

Nie musisz uciec przed znakami ampersand w pierwszej części wyrażenia regularnego. Ma tylko specjalne znaczenie w drugiej (zastępującej) części.

Szukasz wzorów, które mówią "\ &" i zastępują je wzorami, które mówią "\ & \ &".

Prosty sposób, aby wymienić tylko:

:.,+30s/&/&&/g 
1

Może być również przydatna uwaga, że ​​jeśli trzeba zmienić pozycję & na przykład: _& do &_& musi być uciekł tylko w instrukcjach zamieniających wyrażenie zastępcze:

:.,+30s/ &/\& /g 
     ^
Powiązane problemy