Às vezes eu preciso para substituir .
com ->
a fixação de código.
Normalmente, pesquisar e substituir não pode ser usado porque haverá muitos (centenas de) pontos ( .
) e apenas alguns deles devem ser alterados.
No entanto, encontro os que precisam ser alterados quando estou passando por uma lista de mudanças de make .
Usar o operador de repetição não funciona muito bem, porque se eu mudar uma instância e depois repetir com o comando dot, recebo o seguinte:
structBlah->.memberBlah
Se, em seguida, eu usar xpara excluir o ponto estranho, cole e o ponto não funcionará mais porque a última alteração foi uma exclusão.
Então, basicamente, o problema é que o operador de repetição repete um movimento e uma edição, enquanto aqui precisamos repetir duas edições: uma exclusão e uma inserção.
Existe alguma maneira conveniente de fazer isso? Uma ideia que tive foi usar talvez uma macro como esta:
xi-><ESC>
fonte
a<BS>-><Esc>
(da mesma formai<Del>-><Esc>
) comandos são perfeitamente repetíveis para mim.s
vez dei
excluir um caractere e vá para o modo de inserção.Respostas:
O comando cw (change word) resolverá o seu problema.
Coloque o cursor no ponto e digite
cw-><Escape>
torna-se em
e o
.
operador ainda funcionará, porque cw é uma operação que realiza a exclusão e a substituição.fonte
s
porcw
e você a possui.Você pode usar o
s
operador, que exclui o caractere sob o cursor e o coloca no modo de inserção. Você pode digitar a substituição e usá-la posteriormente.
para repetir a substituição inteira. O fluxo de trabalho se torna:/\.
para destacar todos os períodos.n
para o primeiro pontos->
e depois Esc. Isso substituirá o ponto e inserirá o texto com uma única operação.n
para o próximo ponto.
para mudar quando necessário.:h s
para mais informações.fonte
s
solução proposta acima e poderá usá-la no próximo item da sua lista de alterações.n
ajudar a encontrá-los, mas a principal otimização aqui é usar os->
Esc. Essas quatro teclas criam a alteração textual de que você precisa, e você pode usar.
para repetir a ação onde quiser.Eu recomendo usando o comando substitute:
Isso vai:
Isso examinará todo o
.
seu arquivo e perguntará sempre se você deseja substituir.Pressione
y
para substituir,n
para ir para o próximo ponto.veja
:h :s_c
para todas as opções.fonte
:%
por:g/.../
para substituir apenas nas linhas correspondentes,:'<,'>
pelas linhas atualmente selecionadas ou pelas:.
ou:
pela linha atual e use@:
para repetir o comando nas linhas específicas pelas quais você navega de alguma outra maneira.Se você não deseja usar uma substituição ou o comando ponto, conforme sugerido pelas outras respostas, sua melhor aposta é provavelmente criar uma macro que possa ser usada quando o cursor estiver próximo a um ponto.
Você pode gravar a macro
Que irá para o seguinte ponto na linha (
f.
) selecione-o visualmente (v
) e o substitua (c->
).Agora, quando você navega no seu código e identifica um ponto que deve ser alterado, pode chamar a macro com @a.
Você pode até colocar isso no seu
.vimrc
para manter a macro entre as diferentes sessões de codificação:Edite @grochmal sugerido nos comentários para usar um segundo registro para ter uma macro de retrocesso que parece bastante útil:
fonte
let @q="F.vc->^["
elet @w="f.vc->^[""
, e teria um ponto anterior e um próximo comando de ponto .<ESC>
antes doq
na macro? (Não tenho acesso a um computador, então não o testei).