Mit VIM ersetzen, einen Teil des Suchmusters wiederverwenden


29

Ich arbeite mit VImund versuche, einen Befehl zum Suchen und Ersetzen einzurichten, um einige Ersetzungen vorzunehmen, bei denen ich den regulären Ausdruck wiederverwenden kann, der Teil meiner Suchzeichenfolge ist.

Ein einfaches Beispiel wäre eine Linie , wo ich ersetzen wollen (10)zu {10}, wobei 10 eine beliebige Zahl sein kann.

Ich bin so weit gekommen

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

das passt genau zu dem Teil, den ich will.

Nun den Ersatz habe ich ausprobiert

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

Dies ergibt jedoch eine Ausgabe {(10)}

Dann habe ich es versucht

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

Das hat mir aber gegeben ({10}), was ich auch schließe, aber nicht was ich will.

Ich glaube, ich brauche stattdessen eine andere Art von Markierung / Rückverweis \0, aber ich weiß nicht, wo ich suchen soll. Die Frage ist also, ob und wie dies in vim gemacht werden kann.

Antworten:


37

\0ist das ganze Spiel. Um nur einen Teil davon zu verwenden, müssen Sie es so einstellen und \ 1 verwenden

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

Eine ausführlichere Anleitung finden Sie hier oder in der vim Hilfe.


Beachten Sie, dass die Klammern für das Capture mit einem Backslash versehen sind.
Randall

0

Ich habe kürzlich einen älteren Code geerbt und wollte alle Vorkommen ersetzen wie:

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

zu

logging.info("xy") 

oder

logging.info(x,y)

Aufbauend auf der vorherigen Antwort und 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 ersetzen %mit .und entfernen Sie /gwerden Sie am Ende mit

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

Auf diese Weise können Sie jedes Spiel durchgehen und auswählen, ob Sie es ändern möchten oder nicht.


0

Eine bessere Möglichkeit, die einzelnen Übereinstimmungen zu überprüfen, besteht darin, ein "c" am Ende des Codes einzufügen, anstatt zeilenweise vorzugehen

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

Dies beantwortet die ursprüngliche Frage in keiner Weise
Bernhard
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.