No vim, costumo realizar pesquisas para pular para uma palavra ou frase em vez de navegar para lá h/j/k/l
. Então eu bati n
para pular entre as ocorrências.
Digamos que recebi este texto:
Time flies like an arrow; fruit flies like a banana. - Groucho Marx
Eu digito /an arrow
e pressione enter. Essa frase está destacada e eu pulo para ela com n
.
Agora, quero selecionar visualmente esse texto , talvez alterá-lo ou excluí-lo. (Sim, eu conheço o :s
comando de substituição.)
Como meu cursor está na letra "a" no início de "uma flecha", eu posso pressionar e v
, em seguida, pressione e
algumas vezes para destacar a frase inteira. Mas sinto que há uma maneira mais curta e semântica. Afinal, eu já especifiquei o texto em que estou interessado.
Como posso compor um comando para dizer "selecionar visualmente a seleção de pesquisa atual?"
gn
faz exatamente o que foi solicitado. O envio como uma resposta separada enfatiza que é um substituto completo parav//e
. Acabei de editar minha resposta para adicionar documentação, isso é melhor?Tente o seguinte:
Entra no modo visual, repete a última pesquisa e seleciona até o final.
fonte
gn
faz isso também (sem alterar o quen
significa)Descobri que,
v//e
por si só, é insuficiente porque, após você sair do modo visual, pular para o resultado da pesquisa seguinte / anterior coloca o cursor no final do resultado, em vez de no início, como seria de se esperar.Para corrigir isso, devemos primeiro pular para o final do resultado da pesquisa (
//e
) e depois selecionar visualmente para o início (v??
):Felicidades.
fonte
nnoremap g? ??b<cr>v//e<cr>
(faz a mesma coisa, mas a pesquisa para trás em vez de para a frente)Agora existe um plug-in Vim-Search-Objects que faz com que o Vim trate as correspondências de pesquisa como objetos de texto regulares, para que você possa simplesmente
va/
(selecionar visualmente uma correspondência) depois de realizar uma pesquisa.fonte
Uma maneira "burra" de fazer isso é mapear uma chave (neste caso, F5), como abaixo:
Depois de
/an arrow
bater F5.fonte
+1
. Omita isso e ele selecionará apenas a parte que foi pesquisada. Por outro lado,nnoremap <F5> v//e<CR>
parece funcionar muito bem.x
ouc
depois de fazer o seu,F5
mas sem+1
toda a sequência de pesquisa, incluindo o caractere sob o cursor, será excluído.