Existe algum comando no Vim / Vi para mover dentro de um segmento de pesquisa selecionado?
Por exemplo, se eu pesquisar uma palavra, há algum comando para mover o cursor para o final do segmento destacado? Digamos que eu tenha uma palavra, "FishTaco" e desejo pesquisar todas as ocorrências de "Fish" e inserir algo depois dela. Eu sei que poderia fazer uma substituição global, mas e se eu quiser fazer a alteração apenas em algumas instâncias não sequenciais?
Pude ver onde seria conveniente mover o cursor para o final do segmento realçado atual para executar uma ação.
Fish
porFishTaco
, você pode fazer:%s/Fish\(Taco\)\@!/&Taco/
, o que encontrará todos os que aindaFish
não foram seguidosTaco
e substituirá porFishTaco
. Combina uma pesquisa antecipada negativa com uma substituição que inclui o termo correspondente seguido porTaco
.Respostas:
Você pode fazer isso com isto:
/Fish/e
O
/e
no final coloca o cursor no final da região de pesquisa (em vez do primeiro caractere por padrão.fonte
/Fish
pesquisa, você pode pular para o final com//e
e do Vim 7.4, você pode usargn
para destacar visualmente o resultado encontrado.Se você quiser apenas colocar o cursor após o último caractere de Peixe, você pode usar
que colocará o cursor após h. (Sem o
+1
o cursor terminará à esquerda do último caractere.)Se estiver particularmente interessado em colocar o cursor depois de Fish, mas apenas quando ele aparecer em "FishTaco", você pode tentar uma das seguintes opções:
Você pode usar
e o cursor ficará entre Fish e Taco. O
/s+4
posiciona o cursor 4 posições após o início do termo de pesquisa.Você também pode usar
que colocará o cursor 3 lugares à esquerda do lado esquerdo do último caractere (final).
Você também pode usar
porque
/b+4
será tratado como/s+4
.fonte
Se você já pesquisou
/Fish
, pode mudar rapidamente a pesquisa para ir ao final da correspondência via//e
, que repete a última pesquisa, mas acrescenta oe
modificador que já foi explicado.fonte
/ long-regexp1 \zs long-regexp2 /
.. o cursor irá parar em \ zs , veja: help \ zsfonte
Depois de ter uma seleção visual, você pode usar
o
para alternar a posição do cursor entre o início e o fim do bloco selecionado. Quando a seleção é feita em linha, isso alterna a linha posição , o que significa que o cursor se move para a linha inicial e final da seleção, mas não para o caractere inicial ou final. Quando a seleção é baseada em caracteres, o movimento também é feito em função de caracteres.Você também pode usar
`<
e`>
para alternar o cursor entre o início e o fim do bloco visual, no entanto, isso afeta a própria seleção, por isso é usado para redefinir ou ajustar os limites da seleção.Edit: Ah, mas para destaques de pesquisa isso não funcionará, porque
o
irá iniciar uma inserção de linha. Acho que o destaque da pesquisa não é o mesmo que uma seleção visual, desculpe :)fonte
A parte "cursor no final da partida" da sua pergunta já foi respondida.
Você pode fazer
:%s/Fish/FishTaco/c
. Isso lhe dá a oportunidade de confirmar ou rejeitar todas as substituições e pular todo o negócio de "cursor no final da partida".fonte
y
oun
e assim por diante até que não haja mais correspondências. Para aceitar todas as outras substituições, digitea
; para rejeitá-las, digiteq
.g
pós-final,/
então não estava continuando na minha fila. Obrigado pela dica.