回答:
次のソリューションを使用できます。
最初に使用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は\%#
彼のコメントで使用する方法を示しました。マークのあるパターンの場合は、wit 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 \@<=
)を使用して、先行する '(' :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
。これは@<=
、カーソル位置の後に()文字が続くスペースとして説明できます。