Procure por seleção no vim

107

Eu uso plug-ins do vim e vim para estúdio visual ao escrever C ++. Freqüentemente, encontro-me querendo pesquisar uma string dentro de uma função, por exemplo, cada chamada para object->public_member.memberfunc().

Sei que o vim oferece uma maneira conveniente de pesquisar uma única palavra, pressionando *e #, e também pode pesquisar strings digitadas usando o onipresente /comando barra . Ao tentar pesquisar todas as instâncias de uma string mais longa como a acima, demora um pouco para digitar novamente /.

Existe uma maneira de pesquisar por seleção? Por exemplo, destaque com ve copie com y, há uma maneira de colar depois /? Existe um atalho mais fácil?

Marcin
fonte

Respostas:

154

Verifique esta dica do Vim: Pesquise por texto selecionado visualmente

Ou você pode simplesmente puxar o texto selecionado com y e ir para o modo de pesquisa / , então você pode colar o último texto puxado com Ctrl + R 0

CMS
fonte
4
@CMS. Obrigado. Ótima dica! Usar: reg para ver o que está em seus registros e, em seguida, usar cntl-R N para obter o que está no registro N é excelente!
Rob Wells
85

Responda

  1. Puxe o texto que você deseja pesquisar
  2. q/p
  3. Enter

Explicação

q/funciona de forma semelhante à pesquisa vanilla, /exceto que você está no modo de comando, então, pna verdade, "cola" em vez de digitar o caractere p. Assim, o acima irá copiar o texto que você está procurando e colá-lo em uma pesquisa.

Para mais detalhes digite :help q/

Cory Klein
fonte
4
Eu gosto deste, porque acho que digitar <ctrl-r> é tão inconveniente.
janeiro
Excelente! Usando emacs em evil-mode, isso realmente funciona, enquanto a resposta aceita falha miseravelmente (provavelmente por causa do uso da Ctrlchave).
eestrada
2
Ótimo para strings simples, mas não evita caracteres especiais regex, conforme observado no comentário desta outra resposta .
Bluu de
1
E você nem precisa puxar. Selecione-o no visual, q/gvponde gvrepresenta a última seleção visual ...
1
@nwildner, q/gvpnão funciona para mim. Você poderia esclarecer sua sugestão?
bam
38

Use q / em vez de apenas / . (Mesmo com q : ). Agora você pode editar pelo VIM por meio de seu histórico de comandos e pesquisas! (Tente Ctrl-N e Ctrl-P em algum momento).


fonte
10

Acabei de saber (através do excelente livro Practical Vim ) que existe um plugin para isso. Você pode encontrar o plugin no GitHub .

O plugin permite que você pesquise uma seleção visual com *e #.

máquina fofa
fonte
5
Observe que as outras respostas não escapam. Usando esses métodos, quaisquer metacaracteres selecionados não serão pesquisados ​​literalmente, dependendo da magicconfiguração atual . Isso pode até fazer com que a pesquisa falhe por metacaracteres que requeiram equilíbrio. O plugin mencionado aqui fará o escape antes de pesquisar o texto selecionado.
Kurt Hutchinson
1
funciona, mas, infelizmente, você não pode usar npara ir para o próximo item encontrado, enquanto as abordagens de Cory e CMS permitem ..
Ayrat
2

Na verdade, você pode selecionar o texto visualmente e pressionar * e # para pesquisar a próxima ocorrência ... Funcionará da mesma forma, a única ressalva é que:

O espaço em branco na seleção corresponde a qualquer espaço em branco, ao pesquisar (pesquisar por "hello world" também encontrará "hello" no final de uma linha, com "world" no início da próxima linha).

http://vim.wikia.com/wiki/Search_for_visually_selected_text

AhHatem
fonte
2
para mim, selecionar texto visualmente e pressionar * apenas estende minha seleção visual.
Martin Jakubik
Você não pode, por padrão, a menos que coloque no vimrc o mapeamento da página.
Ayrat