Answers:
您可以使用以下解决方案:
首先用于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
在标记位置之后匹配@ 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
您可以使用look back(:h \@<=
)来确保前面有一个'(',以及一个字尾边界(:h \>
)以确保替换发生在所需的位置。
所以,加上文字:
function my_function(argument, another argument, but there are spaces)
运行命令:
:s/\((.*\)\@<=\> /_/g
将产生:
function my_function(argument, another_argument, but_there_are_spaces)
如果替换操作始终具有已知的起点,则这可能比每次定位光标都容易。
\%#
。因此,您可以使用::s/\v(%#.*)@<= /_/g
。可以将其描述为@<=
光标位置后的()字符前面的空格。