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 \%Vweisen 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 /\%>cund :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 \vund:h /\@<=
\%#. So könnten Sie verwenden::s/\v(%#.*)@<= /_/g. Dies könnte als ein Leerzeichen beschrieben werden, dem (@<=) Zeichen nach der Cursorposition vorangestellt sind .