Puede usar la siguiente solución:
Primero use v$para seleccionar el texto desde el cursor hasta el final de la línea. Luego use el siguiente comando:
:s/\%V\ /_/g
La \%V
indicación para cambiar el texto en el área previamente seleccionada visualmente, ver :h /\%V
.
Si tomo tu ejemplo:
function my_function(argument, another argument, but there are spaces)
Si mi cursor está en la columna 40 y utilizo el comando que acabo de escribir, obtengo:
function my_function(argument, another argument,_but_there_are_spaces)
En respuesta a tu comentario también puedes usar
\%#
que coincide desde la posición del cursor
\%>23c
que coincide después de la columna 23.
\%>'m
que coincide después de la posición de una marca
Ver :h /\%#
, :h /\%>c
y :h /\%>'m
.
@ User9433424 dio una manera de usar \%#
en su comentario. Para el patrón con la marca, puede configurarlo con ingenio may luego usar:
:s/\%>'a /_/g
Una explicación del patrón dado por @ User9433424 es la siguiente:
: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
Querrás ver :h \v
y:h /\@<=
\%#
. Por lo tanto, se puede utilizar::s/\v(%#.*)@<= /_/g
. Que podría describirse como un espacio precedido por (@<=
) caracteres después de la posición del cursor.