Ви можете використовувати таке рішення:
Спочатку використовуйте v$для вибору тексту від курсору до кінця рядка. Потім використовуйте таку команду:
:s/\%V\ /_/g
\%V
Вказують на зміну тексту в раніше візуально обраної області, см :h /\%V
.
Якщо я візьму ваш приклад:
function my_function(argument, another argument, but there are spaces)
Якщо мій курсор знаходиться на 40-му стовпці, і я використовую команду, яку я щойно написав, я отримую:
function my_function(argument, another argument,_but_there_are_spaces)
У відповідь на ваш коментар ви також можете використовувати
\%#
що відповідає позиції курсору
\%>23c
який відповідає після 23-ї колонки.
\%>'m
яка відповідає після позиції знака
Дивіться :h /\%#
, :h /\%>c
і :h /\%>'m
.
@ User9433424 дав спосіб використовувати \%#
у своєму коментарі. Для візерунка з позначкою ви можете встановити його дотепно, maа потім використовувати:
:s/\%>'a /_/g
Пояснення шаблону, наданого @ User9433424, наступне:
: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
Ви захочете побачити :h \v
і:h /\@<=
\%#
. Таким чином, ви можете використовувати::s/\v(%#.*)@<= /_/g
. Який може бути описаний як пробіл, який передує@<=
символам ( ) після позиції курсору.