2012-10-19 4 views
5

Ich habe einige Zeilen wie unten:vim Ersatz Ausgabe

aaa 
bbb 
ccc 
ddd 

Ich möchte, dass sie wie folgt geändert werden:

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

so dass ich den folgenden Befehl verwenden es in vim zu tun, aber ich einen Fehler bekam

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

und ich erkannte die \1 hier konnte nicht zweimal verwendet werden, dann, wie soll ich das tun?

Antwort

4

Die hintere Referenz \1 kann so oft verwendet werden, wie Sie möchten, aber Sie haben ein anderes Problem. Ihre regex so aussehen sollte:

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

Erläuterung: die % vim erzählt auf allen Linien zu ersetzen; ^ als eine Markierung für den Anfang der Zeile sollte das erste Zeichen in Ihrem Regex sein und sollte nicht maskiert werden. Die .* bedeutet "irgendein Zeichen beliebig oft". Der ursprüngliche Ausdruck \(\^*\) sucht jedoch nach einer beliebigen Anzahl von Wiederholungen des Literalzeichens ^ (einschließlich keiner).

+0

groß, mein Problem gelöst, danke! :) – user1726366

4

Wenn Sie den gesamten Inhalt der Zeile abgleichen, benötigen Sie weder den Anker ^ noch das Capture über \(...\). Im Austausch können Sie \0 oder kürzere & verwenden. (Auch müssen Sie nicht die $ dort zu entkommen.)

:%s/.*/&=$&