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 \%V
indiquer 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 /\%>c
et :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 \v
et: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.