Ich habe eine Zeile wie diese:
function my_function(argument, another argument, but there are spaces)
Ich möchte die Leerzeichen (innerhalb der Argumentnamen) durch Unterstriche ersetzen. Ich möchte also verwenden:
:s/\ /_/g
aber wie kann ich wählen, dass es nicht auf die gesamte Zeile angewendet wird, sondern beispielsweise ab der Cursorposition? (Oder das dritte Wort)?
\%#
. So könnten Sie verwenden::s/\v(%#.*)@<= /_/g
. Dies könnte als ein Leerzeichen beschrieben werden, dem (@<=
) Zeichen nach der Cursorposition vorangestellt sind .\%#
Trick vorgeschlagen , ich werde seine Antwort akzeptieren, wenn Sie keinen schreiben ... Aber könnte einer von Ihnen den regulären Ausdruck etwas expliziter erklären?Antworten:
Sie könnten die folgende Lösung verwenden:
Verwenden Sie zuerst v$den Text vom Cursor bis zum Ende der Zeile an. Dann benutze den folgenden Befehl:
Die
\%V
weisen darauf hin, den Text im zuvor visuell ausgewählten Bereich zu ändern, siehe:h /\%V
.Wenn ich dein Beispiel nehme:
Wenn sich mein Cursor in der 40. Spalte befindet und ich den Befehl verwende, den ich gerade geschrieben habe, erhalte ich:
Als Antwort auf Ihren Kommentar können Sie auch verwenden
\%#
die von der Cursorposition übereinstimmt\%>23c
welches nach der 23. Spalte übereinstimmt.\%>'m
die nach der Position einer Marke übereinstimmtSiehe
:h /\%#
,:h /\%>c
und:h /\%>'m
.@ User9433424 gab eine Möglichkeit,
\%#
in seinem Kommentar zu verwenden. Für das Muster mit der Markierung können Sie es mit setzen maund dann verwenden:Eine Erklärung des von @ User9433424 angegebenen Musters lautet wie folgt:
Du wirst sehen wollen
:h \v
und:h /\@<=
quelle
Sie können look behind (
:h \@<=
) verwenden, um sicherzustellen, dass ein vorangestelltes '(' und eine Wortende-Grenze (:h \>
) vorhanden sind, um sicherzustellen, dass die Ersetzung dort erfolgt, wo Sie sie möchten.Also mit dem Text:
Befehl ausführen:
wird herstellen:
Dies ist möglicherweise einfacher, als den Cursor jedes Mal neu positionieren zu müssen, vorausgesetzt, die Substitution hat immer einen bekannten Startpunkt.
quelle