"Localizar próximo" no Vim


536

Para procurar no Vim cake, digitei /cake, mas o cursor salta para a primeira correspondência quando pressiono return. Existe um comando do Vim análogo ao "localizar próximo"?


33
Acostume-se a usar :help. :help /mostra ajuda sobre a pesquisa e a resposta à sua pergunta aparece um pouco abaixo na página.
31711 Chris Chris

Respostas:


877

É npara o próximo e Npara o anterior.

E se você usar a pesquisa reversa com ?(por exemplo ?cake) em vez de /, é o contrário.

Se estiver instalado no seu sistema, você deve tentar executar o vimtutorcomando no seu terminal, o que iniciará um tutorial dos comandos básicos do Vim.

Rob Wells conselhos sobre *e #também é muito pertinente.



Existe uma maneira de pular para a próxima partida (não na linha atual)?
User13107

@ user13107: n e N funcionam em todo o buffer / arquivo. Você não está limitado à linha atual.
Xavier T. #

@XavierT. qualquer idéia, como eu posso pular um número fixo de resultados na pesquisa. Quero dizer, por exemplo, pule para a 10ª linha correspondente
GP cyborg

@ GPcyborg: ncomo a maioria dos operadores vim, pode ser prefixado com um número para repetir o comando. Se você digitar 10n, passará para o 10º resultado (após o inicial). Também funciona para todos os operadores de movimento que gostam 3jde descer três linhas.
Xavier T.

211

O atalho mais útil no Vim, IMHO, é a *chave.

Coloque o cursor em uma palavra e pressione a *tecla e você irá para a próxima instância dessa palavra.

A #chave faz o mesmo, mas salta para a instância anterior da palavra.

É realmente uma economia de tempo.


6
E no caso de que não era óbvio, ne Nlevá-lo para a frente e para trás através dos *jogos, uma vez que você pressionou *. (Ou você pode apenas manter pressionando *para ir para a frente ou #para ir para trás, mas usando esses deslocou-chaves é geralmente sub-óptima.)
Herbert Sitz

3
@ Herbert, na verdade N e N não levam você "para frente" e "para trás" resp. Como o @Xavier observou acima, n é o próximo e N é o anterior . O controle da pesquisa para frente e para trás é feito, declarando a pesquisa com a tecla '/' e a tecla '?' ou com a tecla '*' e a tecla '#'.
Rob Wells

Eu não acho que * seja útil ... na maioria das vezes, estou procurando por um fragmento de uma palavra (por exemplo, parte de um nome de função). Eu não quero /Func, leve-o para SomeFunce pressione '*' para ir para a próxima instância de SomeFuncquando a próxima instância Funcestiver SomeOtherFunc.
Weberc2 19/09/2013

Pior ainda, com C ++ I acham que ele não ir de invocação de método para implementação do método, porque /\<foo\>não corresponde"className::foo()"
puk

84

Quando eu estava começando, precisava assistir a uma demonstração .

Como pesquisar no Vim

  1. tipo /
  2. digite o termo de pesquisa, por exemplo, "var"
  3. pressione enter
  4. para a próxima instância, pressione n(para anterior N )

2
A digitação *está incorreta. Ou seja, um arquivo aa aaa. Pesquisa /aa, você tem que corresponder. Na primeira partida, pressionar *muda o termo da pesquisa.
Bernhard

1
n não é 'próximo', mas "repete a última pesquisa". Então, digitando? Var, você começará a pesquisar para cima da sua posição atual por 'var'. E 'N' é, na verdade, "repita a última pesquisa na direção oposta"; portanto, neste exemplo, procure "var" para baixo na posição atual.
Rob Wells



13

Conforme discutido, existem várias maneiras de pesquisar:

/pattern
?pattern
* (and g*, which I sometimes use in macros)
# (and g#)

além disso, navegando prev / next com Ne n.

Você também pode editar / recuperar seu histórico de pesquisa, puxando o prompt de pesquisa com /e, em seguida, alternando com C-p/ C-n. Ainda mais útil é q/, o que leva você a uma janela onde você pode navegar no histórico de pesquisas.

Também para consideração é o mais importante 'hlsearch'(digite :hlspara ativar). Isso facilita muito a localização de várias instâncias do seu padrão. Você pode até tornar suas partidas ainda mais brilhantes com algo como:

hi Search ctermfg=yellow ctermbg=red guifg=...

Mas então você pode ficar louco com constantes correspondências amarelas em toda a tela. Então, você frequentemente se encontra usando :noh. Isso é tão comum que um mapeamento está em ordem:

nmap <leader>z :noh<CR>

Lembro-me facilmente deste, zjá que costumava digitar constantemente /zz<CR>(o que é uma ocorrência incomum e rápida de digitar) para limpar meu realce. Mas o :nohmapeamento é muito melhor.


2
Se você está se sentindo inspirado q/, também deve brincar q:. Ambos são realmente úteis! (Na verdade, não relacionados a esta questão, no entanto.)
Micah Elliott

Obrigado, Micah. Eu já sabia sobre 'q:', embora não o use muito. Mas 'q /' foi totalmente esquecido na minha educação em vim, e acho que será muito útil.
precisa saber é o seguinte

2

Se você pressionar Ctrl+ Enterdepois de pressionar algo como "/ wordforsearch", poderá encontrar a palavra "wordforsearch" na linha atual. Em seguida, pressione npara a próxima partida; pressione Npara a partida anterior.


1
“Quando executamos uma pesquisa, o Vim avança a partir da posição atual do cursor, parando na primeira correspondência que encontrar.” Como aponta o Practical Vim.
bass chuck
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.