Vous pouvez utiliser la solution suivante:
Utilisez d'abord v$pour sélectionner le texte du curseur jusqu'à la fin de la ligne. Utilisez ensuite la commande suivante:
:s/\%V\ /_/g
Pour \%Vindiquer de modifier le texte dans la zone précédemment sélectionnée visuellement, voir :h /\%V.
Si je prends votre exemple:
function my_function(argument, another argument, but there are spaces)
Si mon curseur se trouve sur la 40e colonne et que j'utilise la commande que je viens d'écrire, j'obtiens:
function my_function(argument, another argument,_but_there_are_spaces)
En réponse à votre commentaire, vous pouvez également utiliser
\%# qui correspond à la position du curseur
\%>23c qui correspond après la 23e colonne.
\%>'m qui correspond après la position d'une marque
Voir :h /\%#, :h /\%>cet :h /\%>'m.
@ User9433424 a donné un moyen d'utiliser \%#dans son commentaire. Pour le motif avec la marque, vous pouvez le définir avec ma, puis utiliser:
:s/\%>'a /_/g
Une explication du modèle donné par @ User9433424 est la suivante:
: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
Vous aurez envie de voir :h \vet:h /\@<=
\%#. Ainsi, vous pouvez utiliser::s/\v(%#.*)@<= /_/g. Ce qui pourrait être décrit comme un espace précédé de (@<=) caractères après la position du curseur.