Se eu tiver o seguinte:
function foo(bar) {
return bar + 1;
}
E eu uso cw
para alterar o primeiro bar
para baz
, como pulo para a próxima correspondência bar
, para que eu possa usar .
para fazer a mesma alteração?
Não posso usá-lo *
, porque ele procura a palavra atual sob o cursor e, tolamente, não procurei pela bar
primeira vez, portanto n
não funcionará.
Existe uma maneira simples de procurar a próxima ocorrência da palavra como era antes de eu a alterar?
Eu não quero fazer uma pesquisa e substituir, porque existem outras ocorrências bar
no meu arquivo que eu não quero alterar ou porque havia apenas duas instâncias bar
e eu esqueci :%s/bar/baz/
antes de começar e isso é muito muito esforço para alterar a única instância restante.
*
pesquisa. Especialmente,*
seleciona visualmente a palavra atual sem mover o cursor. Uma vez instalado, você pode*ciw
colocar a palavra antiga no registro de pesquisa e alterar a palavra. Então você pode usarn
e.
.n
não funcionaria.Respostas:
O texto com o qual você acabou de alterar
cw
foi cortado no registro sem nome para que você possa reutilizá-lo com:para pular para a próxima ocorrência do texto coberto por sua última alteração.
fonte
Para estender o romainl como um fluxo de trabalho completo ...
Se você deseja executar uma edição desse tipo e perceber que precisa aplicar as mesmas edições em um parágrafo / função, use os registradores
"
e.
.No seu exemplo, você pode executar a edição inicial do argumento. Se você entrar no modo visual (eu usaria o Visual Line apenas para ter certeza de selecionar tudo corretamente) e, em seguida, aplique uma localização e substituição.
V]] - Linha visual, até o final do parágrafo / função.
:'<,'>
Esse padrão leva um tempo para se acostumar, já que você precisa usá-lo. Na maioria das vezes, você deseja aplicar a localização e a substituição a toda a função, incluindo o argumento, mas é uma boa maneira de não executar o antipadrão "Faça o trabalho, perceba que você deveria ter feito melhor, desfazer e refazer corretamente."
fonte
Se você não se importa em pressionar uma combinação diferente
cw
, acredito que você pode obter o que deseja facilmente, definindo um atalho. O que você pode fazer é colocar o seguinteno seu
.vimrc
arquivo. Observe que^M
é uma captura da chave de retorno, e não os caracteres^
eM
. Você obtém pressionando Ctrl+ Vno modo de inserção seguido de Enter. Agora, com isso definido, pressionar<leader>a
fará o mesmo quecw
, mas agora a palavra (anterior à alteração) estará em seu "último registro de pesquisa" (ou seja, o/
registro), portanto, pressionar ndepois de fazer a alteração e retornar ao modo normal, você será levado para a próxima ocorrência. Da mesma forma, pressionar pressionará Nvocê para a ocorrência anterior.O atalho É claro que você pode escolher um atalho diferente
<leader>a
, mas acho que esse é um atalho muito acessível. Pessoalmente, eu configurei<leader>
para,
que eu só precise pressionar ,seguido de a, mas isso ocorre porque eu não uso um teclado americano, para que o meu \fique oculto um pouco (acredito que \seja o padrão<leader>
).Explicação A ideia é realmente simples. Arranque a palavra sob o cursor para o registro de pesquisa
/
e façacw
. Assimnmap <leader>a "/yciw
era o que eu estava buscando, mas infelizmente eu não acho que você pode arrancar para o registo de pesquisa, de modo que a solução é arrancar a palavra sob o cursor para o1
registo, em seguida, definir o/
registo igual a isso, e depois fazercw
. O mesmo"1yiw
acontece com a parte que puxa a palavra interna sob o cursor para o registro1
. Se você não conhece as palavras interiores, pode conferir:help iw
. Depois,:let @/=@1
segue uma captura de Entercoloca o conteúdo do1
registro no arquivo/
. Neste ponto neNfunciona como a ocorrência seguinte e anterior da palavra sob o cursor e aciw
é feito para que a palavra sob o cursor seja excluída e o Vim seja colocado no modo de inserção.palavra versus palavra interna Acabei de perceber que assumi que você queria a palavra inteira sob o cursor, e não apenas do ponto do cursor em diante. É por isso que eu usei em
iw
vez de emw
qualquer lugar. Se não for esse o caso, você deve usarem vez de. Se o cursor estiver na primeira letra da palavra, não há diferença.
aviso Esta solução provavelmente não vai funcionar bem se você tentar usá-lo em algo que contém diferentes coisas de letras, por exemplo, tendo o suporte cursor em um
\
ou substituindoiw
poriW
,ib
,is
ouip
ou algo (embora eu não sei por que você faria quer esse recurso com frases inteiras)fonte