Vim - selecione o texto destacado pela pesquisa?


53

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 npara 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 arrowe 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 :scomando de substituição.)

Como meu cursor está na letra "a" no início de "uma flecha", eu posso pressionar e v, em seguida, pressione ealgumas 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?"

Respostas:


38

Você pode usar a gnversão 7.4 em diante (e gNpara trás). Ele substitui o v//etruque.

Pesquise o último padrão de pesquisa usado, como com `n`, e inicie o modo Visual para selecionar a correspondência.

Veja :help gnou este Vimcast para mais informações.


Isso duplica um comentário para outra resposta e não é muito útil como está. Pode ser uma boa idéia se você citar a documentação para que sua resposta possa permanecer por si mesma.
precisa saber é o seguinte

2
Feliz em melhorar a resposta, mas não tenho certeza se isso ajudaria. A pergunta estabelece o objetivo corretamente ("selecione visualmente o próximo resultado da pesquisa") e gnfaz exatamente o que foi solicitado. O envio como uma resposta separada enfatiza que é um substituto completo para v//e. Acabei de editar minha resposta para adicionar documentação, isso é melhor?
David Lord

Isso é bom, obrigado. Se precisar de ajuda, verifique o tour e o centro de ajuda . Bem-vindo ao Superusuário, e esperamos que você aproveite a sua estadia.
precisa saber é o seguinte

1
Fantástico! Obrigado por atualizar este tópico com os melhores e mais recentes. :)
Nathan Long

29

Tente o seguinte:

/an arrow
v//e

Entra no modo visual, repete a última pesquisa e seleciona até o final.


1
De Vim 7.4 no gnfaz isso também (sem alterar o que nsignifica)
smathy

8

Descobri que, v//epor 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??):

" visually select a search result
nnoremap g/ //e<Enter>v??<Enter>

Felicidades.


Por simetria: nnoremap g? ??b<cr>v//e<cr>(faz a mesma coisa, mas a pesquisa para trás em vez de para a frente)
Kyle Strand

2

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.


1

Uma maneira "burra" de fazer isso é mapear uma chave (neste caso, F5), como abaixo:

nnoremap <F5> v/<c-r>=strpart(@/,1) . '/e+1'<CR><CR>

Depois de /an arrowbater F5.


Isso seleciona mais um caractere por causa do +1. Omita isso e ele selecionará apenas a parte que foi pesquisada. Por outro lado, nnoremap <F5> v//e<CR>parece funcionar muito bem.
Dennis Williamson

@Dennis Williamson, + 1 é necessário para selecionar exatamente o que foi pesquisado, se você remover +1, o último caractere não será selecionado porque não seleciona o caractere em que o cursor está. De qualquer forma, o nnoremap <F5> v // e <CR> é muito melhor.
Johnny

Ele seleciona o personagem para mim. Se eu pressionar xou cdepois de fazer o seu, F5mas sem +1toda a sequência de pesquisa, incluindo o caractere sob o cursor, será excluído.
Dennis Williamson

@ Dennis Williamson, acabei de saber que minha opção de 'seleção' está definida como "exclusiva", mas o valor padrão é "inclusivo". É por isso que funcionou para você sem +1. (Veja: seleção de ajuda)
Johnny
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.