Możesz użyć następującego rozwiązania:
Najpierw użyj, v$aby zaznaczyć tekst od kursora do końca linii. Następnie użyj następującego polecenia:
:s/\%V\ /_/g
\%VWskazują na zmianę tekstu w uprzednio wybranym obszarze wizualnie, zobacz :h /\%V.
Jeśli wezmę twój przykład:
function my_function(argument, another argument, but there are spaces)
Jeśli mój kursor znajduje się w 40. kolumnie i użyję właśnie napisanego polecenia, otrzymuję:
function my_function(argument, another argument,_but_there_are_spaces)
W odpowiedzi na Twój komentarz możesz także użyć
\%# który pasuje z pozycji kursora
\%>23c który pasuje po 23 kolumnie.
\%>'m który pasuje po pozycji znaku
Zobacz :h /\%#, :h /\%>ca :h /\%>'m.
@ User9433424 dał sposób na wykorzystanie \%#w swoim komentarzu. Dla wzoru ze znakiem możesz ustawić go dowcipem, maa następnie użyć:
:s/\%>'a /_/g
Wyjaśnienie wzoru podane przez @ User9433424 jest następujące:
: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
Będziesz chciał zobaczyć :h \vi:h /\@<=
\%#. Tak, można użyć::s/\v(%#.*)@<= /_/g. Który można opisać jako spację poprzedzoną@<=znakami ( ) po pozycji kursora.