Você poderia usar a seguinte solução:
Primeiro, use v$para selecionar o texto do cursor até o final da linha. Em seguida, use o seguinte comando:
:s/\%V\ /_/g
O \%V
indica para alterar o texto na área visualmente selecionada anteriormente, consulte :h /\%V
.
Se eu der o seu exemplo:
function my_function(argument, another argument, but there are spaces)
Se meu cursor estiver na 40ª coluna e eu usar o comando que acabei de escrever, recebo:
function my_function(argument, another argument,_but_there_are_spaces)
Em resposta ao seu comentário, você também pode usar
\%#
que corresponde da posição do cursor
\%>23c
que corresponde após a 23ª coluna.
\%>'m
que corresponde após a posição de uma marca
Ver :h /\%#
, :h /\%>c
e :h /\%>'m
.
@ User9433424 deu um jeito de usar \%#
em seu comentário. Para o padrão com a marca, você pode defini-lo com o marcador mae usar:
:s/\%>'a /_/g
Uma explicação do padrão fornecido por @ User9433424 é o seguinte:
: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
Você vai querer ver :h \v
e:h /\@<=
\%#
. Então, você poderia usar::s/\v(%#.*)@<= /_/g
. O que pode ser descrito como um espaço precedido por@<=
caracteres ( ) após a posição do cursor.