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:
:s/\%V\ /_/g
Die \%V
weisen darauf hin, den Text im zuvor visuell ausgewählten Bereich zu ändern, siehe :h /\%V
.
Wenn ich dein Beispiel nehme:
function my_function(argument, another argument, but there are spaces)
Wenn sich mein Cursor in der 40. Spalte befindet und ich den Befehl verwende, den ich gerade geschrieben habe, erhalte ich:
function my_function(argument, another argument,_but_there_are_spaces)
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 übereinstimmt
Siehe :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:
:s/\%>'a /_/g
Eine Erklärung des von @ User9433424 angegebenen Musters lautet wie folgt:
:s/\v(%#.*)@<= /_/
:s/ substitution command
\v Enable the very magic mode
%#.* Any characters from the cursor position
@<= Check for matches just before what follows
space Followed by a space
/_/ Substitute the matches by underscores
Du wirst sehen wollen :h \v
und:h /\@<=
\%#
. So könnten Sie verwenden::s/\v(%#.*)@<= /_/g
. Dies könnte als ein Leerzeichen beschrieben werden, dem (@<=
) Zeichen nach der Cursorposition vorangestellt sind .