2012-10-19 23 views
5

Mam niektóre linie takie jak poniżej:vim wymiana problem

aaa 
bbb 
ccc 
ddd 

chcę, żeby zostać zmienione tak:

aaa=$aaa 
bbb=$bbb 
ccc=$ccc 
ddd=$ddd 

więc użyć następującego polecenia, aby to zrobić w vim, ale masz błąd

:s/\(\^*\)/\1=\$\1/ 

i zdałem sobie sprawę \1 tutaj nie może być stosowany dwa razy, to jak mam to zrobić?

Odpowiedz

4

Powrót numer \1 może być używany tyle razy, ile chcesz, ale masz inny problem. Twój regex powinien wyglądać tak:

:%s/^\(.*\)/\1=\$\1/ 

Wyjaśnienie: % mówi vim wymienić na wszystkich liniach; ^ jako znak początku linii powinien być pierwszą postacią w wyrażeniu regularnym i nie należy jej unikać. .* oznacza "dowolny znak dowolną liczbę razy". Jednak oryginalne wyrażenie \(\^*\) będzie szukać dowolnej liczby powtórzeń literalnego znaku (w tym żadnego).

+0

Świetnie, mój problem rozwiązany, dziękuję! :) – user1726366

4

Podczas dopasowywania całej zawartości linii, nie trzeba ani kotwicy ^, ani przechwytywania przez \(...\). W zastępstwie możesz użyć \0 lub krótszego &. (Nie musisz też uciec z $).

:%s/.*/&=$&