Ersetzen durch VIM, Wiederverwenden eines Teils des Suchmusters

Ersetzen durch VIM, Wiederverwenden eines Teils des Suchmusters

Ich arbeite daran VImund versuche, einen Such- und Ersetzungsbefehl einzurichten, um einige Ersetzungen vorzunehmen, bei denen ich den regulären Ausdruck, der Teil meiner Suchzeichenfolge ist, wiederverwenden kann.

Ein einfaches Beispiel wäre eine Zeile, in der ich (10)durch ersetzen möchte {10}, wobei 10 eine beliebige Zahl sein kann.

Ich bin so weit gekommen

  .s/([0-9]*)/what here??/

das entspricht genau dem Teil, den ich möchte.

Nun der Ersatz, ich habe versucht

  .s/([0-9]*)/{\0}/

Dies ergibt jedoch als Ausgabe{(10)}

Dann versuchte ich

 .s/(\zs[0-9]*\ze)/{\0}/

Allerdings gab es bei mir das ({10}), was ich auch schließe, aber nicht das was ich will.

Ich glaube, ich brauche stattdessen eine andere Art der Markierung/Rückverweis \0, weiß aber nicht, wo ich suchen soll. Die Frage ist also, ob dies in vim möglich ist und wenn ja, wie?

Antwort1

\0ist die gesamte Übereinstimmung. Um nur einen Teil davon zu verwenden, müssen Sie es wie folgt festlegen und \1 verwenden

.s/(\([0-9]*\))/{\1}/

Eine detailliertere Anleitung finden SieHieroder in der Vim-Hilfe.

Antwort2

Ich habe vor Kurzem alten Code geerbt und wollte alle Vorkommen wie die folgenden ersetzen:

print "xx"
print x,y
print 'xx'

Zu

logging.info("xy") 

oder

logging.info(x,y)

Aufbauend auf der vorherigen Antwortund in der Hoffnung, dass jemand davon profitiert, habe ich den folgenden Befehl verwendet, der alle Vorkommen ändert:

%s/print\( .*\)/logging.info\(\1\)/g

Wenn Sie %durch ersetzen .und entfernen, /gerhalten Sie

.s/print\( .*\)/logging.info\(\1\)

Dadurch können Sie jede Übereinstimmung durchgehen und entscheiden, ob Sie sie ändern möchten oder nicht.

Antwort3

Besser ist es, jede Übereinstimmung durchzugehen, indem Sie am Ende des Codes ein „c“ hinzufügen, anstatt Zeile für Zeile vorzugehen.

%s/print\( .*\)/logging.info\(\1\)/gc

verwandte Informationen