Eu tenho uma linha como esta:
function my_function(argument, another argument, but there are spaces)
Quero substituir os caracteres de espaço (dentro dos nomes dos argumentos) por sublinhado. Assim, eu gostaria de usar:
:s/\ /_/g
mas como posso optar por não aplicá-lo a toda a linha, mas partindo, digamos, da posição do cursor? (Ou a terceira palavra)?
\%#
. Então, você poderia usar::s/\v(%#.*)@<= /_/g
. O que pode ser descrito como um espaço precedido por@<=
caracteres ( ) após a posição do cursor.\%#
truque, aceitarei a resposta dele se você não escrever um ... Mas algum de vocês poderia explicar o regexp um pouco mais explicitamente?Respostas:
Você poderia usar a seguinte solução:
Primeiro, use v$para selecionar o texto do cursor até o final da linha. Em seguida, use o seguinte comando:
O
\%V
indica para alterar o texto na área visualmente selecionada anteriormente, consulte:h /\%V
.Se eu der o seu exemplo:
Se meu cursor estiver na 40ª coluna e eu usar o comando que acabei de escrever, recebo:
Em resposta ao seu comentário, você também pode usar
\%#
que corresponde da posição do cursor\%>23c
que corresponde após a 23ª coluna.\%>'m
que corresponde após a posição de uma marcaVer
:h /\%#
,:h /\%>c
e:h /\%>'m
.@ User9433424 deu um jeito de usar
\%#
em seu comentário. Para o padrão com a marca, você pode defini-lo com o marcador mae usar:Uma explicação do padrão fornecido por @ User9433424 é o seguinte:
Você vai querer ver
:h \v
e:h /\@<=
fonte
Você pode usar look behind (
:h \@<=
) para garantir que exista um '(') e um limite de final de palavra (:h \>
) para garantir que a substituição ocorra onde você desejar.Então, com o texto:
executando o comando:
vai produzir:
Isso pode ser mais fácil do que ter que posicionar o cursor toda vez, desde que a substituição sempre tenha um ponto de partida conhecido.
fonte