Ich arbeite mit VIm
und versuche, a einzurichten Befehl „Suchen und Ersetzen“, um einige Ersetzungen durchzuführen, bei denen ich den regulären Ausdruck, der Teil meiner Suchzeichenfolge ist, wiederverwenden kann.
Ein einfaches Beispiel wäre eine Zeile, in der ich bis {10}
, wobei 10 eine beliebige Zahl sein kann.
Ich bin so weit gekommen
.s/([0-9]*)/what here??/
was genau dem Teil entspricht, den ich möchte.
Als Ersatz habe ich versucht,
.s/([0-9]*)/{\0}/
Aber, Dies ergibt als Ausgabe {(10)}
Dann habe ich versucht
.s/(\zs[0-9]*\ze)/{\0}/
Dies ergab jedoch Ich ({10})
, das ich auch schließe, aber nicht das, was ich will.
Ich denke, ich brauche eine andere Art von Markierung / Rückreferenzierung anstelle dieses \0
, aber ich weiß nicht, wo ich suchen soll. Die Frage ist also, ob dies in vim, a Und wenn ja, wie?
Antwort
\0
ist die gesamte Übereinstimmung. Um nur einen Teil davon zu verwenden, müssen Sie ihn wie folgt einstellen und \ 1
.s/(\([0-9]*\))/{\1}/
verwenden. Eine detailliertere Anleitung finden Sie unter hier oder in der vim-Hilfe.
Kommentare
- Beachten Sie, dass die Klammern für die Erfassung mit einem umgekehrten Schrägstrich versehen sind.
Antwort
Ich habe kürzlich einen alten Code geerbt und wollte alle Vorkommen ersetzen wie:
print "xx" print x,y print "xx"
bis
logging.info("xy")
oder
logging.info(x,y)
Aufbauend auf der vorherigen Antwort und in der Hoffnung, dass jemand davon profitiert, habe ich verwendet Der folgende Befehl ändert alle Vorkommen:
%s/print\( .*\)/logging.info\(\1\)/g
Wenn Sie %
durch und entfernen Sie /g
. Am Ende erhalten Sie
.s/print\( .*\)/logging.info\(\1\)
, mit dem Sie dies tun können geh rüber jedes Spiel und wählen Sie, ob Sie es ändern oder nicht.
Antwort
Besser ist es, wenn Sie jedes Spiel durchgehen können Fügen Sie am Ende des Codes ein „c“ hinzu, anstatt Zeile für Zeile zu gehen.
%s/print\( .*\)/logging.info\(\1\)/gc
Kommentare
- Dies beantwortet ' die ursprüngliche Frage in keiner Weise