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
\%V
Wskazują 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 /\%>c
a :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 \v
i:h /\@<=
\%#
. Tak, można użyć::s/\v(%#.*)@<= /_/g
. Który można opisać jako spację poprzedzoną@<=
znakami ( ) po pozycji kursora.