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?


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


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/


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).


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 #.


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


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
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.