«Trouver le prochain» à Vim


536

Pour rechercher dans Vim cake, je taperais /cake, mais le curseur passe à la première correspondance lorsque j'appuie sur Retour. Existe-t-il une commande Vim analogue à "trouver ensuite"?


33
Habituez-vous à utiliser :help. :help /affiche de l'aide sur la recherche et la réponse à votre question apparaît un peu en bas de la page.
Chris Morgan

Réponses:


878

C'est npour le suivant et Npour le précédent.

Et si vous utilisez la recherche inversée avec ?(par exemple, ?cake) à la place de /, c'est l'inverse.

S'il est installé sur votre système, vous devriez essayer d'exécuter la vimtutorcommande à partir de votre terminal, qui lancera un didacticiel des commandes Vim de base.

Rob Wells conseils au sujet *et #est également très pertinente.


1
voir aussi le plugin de recherche d'index vim.org/scripts/script.php?script_id=1682
SergioAraujo

Existe-t-il un moyen de passer au match suivant (pas dans la ligne actuelle)?
user13107

@ user13107: n et N fonctionnent sur l'ensemble du tampon / fichier. Vous n'êtes pas limité à la ligne actuelle.
Xavier T.

@XavierT. n'importe quelle idée, comment je peux sauter un nombre fixe de résultats dans la recherche. Je veux dire par exemple sauter à la 10e ligne correspondante
GP cyborg

@GPcyborg: ncomme la plupart des opérateurs vim peuvent être préfixés par un nombre pour répéter la commande. Si vous tapez, 10nil passera au 10e résultat (après le premier). Cela fonctionne également pour tous les opérateurs de mouvement comme 3jdescendre 3 lignes.
Xavier

212

Le raccourci le plus utile dans Vim, à mon humble avis, est la *clé.

Placez le curseur sur un mot et appuyez sur la *touche et vous passerez à l'instance suivante de ce mot.

La #clé fait de même, mais elle saute à l'instance précédente du mot.

C'est vraiment un gain de temps.


6
Et au cas où ce ne serait pas évident, net Nvous faire avancer et reculer à travers les *matchs une fois que vous avez appuyé *. (Ou vous pouvez simplement continuer à appuyer *pour avancer ou #pour reculer, mais l'utilisation de ces touches décalées est généralement sous-optimale.)
Herbert Sitz

3
@Herbert, en fait n et N ne vous font pas "avancer" et "reculer" resp. Comme @Xavier l'a noté ci-dessus, n est le suivant et N est le précédent . Le contrôle de la recherche avant et arrière se fait en indiquant la recherche avec la touche '/' et le '?' ou avec la touche '*' et la touche '#'.
Rob Wells

Je ne pense pas que * soit si utile ... la plupart du temps, je recherche un fragment d'un mot (par exemple, une partie d'un nom de fonction). Je ne veux pas /Func, demandez-moi de le faire SomeFunc, puis appuyez sur '*' pour passer à l'instance suivante SomeFunclorsque l'instance suivante de Funcest en SomeOtherFunc.
weberc2

Pire encore, avec C ++, je trouve que cela ne passe pas de l'invocation de méthode à l'implémentation de la méthode car /\<foo\>cela ne correspond pas"className::foo()"
puk

84

Quand je commençais, j'avais besoin de regarder une démo .

Comment rechercher dans Vim

  1. type /
  2. tapez le terme de recherche, par exemple "var"
  3. presse enter
  4. pour l' instance suivante , appuyez sur n(pour la précédente N )

2
La saisie *est incorrecte. C'est-à-dire un fichier aa aaa. Recherche /aa, vous devez correspondre. Lors de la première correspondance, appuyez sur pour *modifier le terme de recherche.
Bernhard

1
n n'est pas "suivant" mais "répéter la dernière recherche". Donc, entrer? Var commencera à chercher vers le haut à partir de votre position actuelle pour 'var'. Et 'N' est en fait "répéter la dernière recherche dans la direction opposée", donc pour cet exemple qui rechercherait vers le bas 'var' à partir de la position actuelle.
Rob Wells



13

Comme indiqué, il existe plusieurs façons de rechercher:

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

plus, en naviguant entre prev et next avec Net n.

Vous pouvez également modifier / rappeler votre historique de recherche en ouvrant l'invite de recherche avec /puis en faisant défiler avec C-p/ C-n. Encore plus utile q/, ce qui vous amène à une fenêtre où vous pouvez parcourir l'historique de recherche.

Également à considérer est le tout-important 'hlsearch'(type :hlsà activer). Cela facilite beaucoup la recherche de plusieurs instances de votre modèle. Vous voudrez peut-être même rendre vos matchs plus brillants avec quelque chose comme:

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

Mais alors vous pourriez devenir fou avec des correspondances jaunes constantes sur tout votre écran. Vous vous retrouverez donc souvent à utiliser :noh. C'est tellement courant qu'un mappage est en ordre:

nmap <leader>z :noh<CR>

Je me souviens facilement de celui-ci zcar j'avais l'habitude de taper constamment /zz<CR>(ce qui est un événement rare et rapide) pour effacer ma surbrillance. Mais la :nohcartographie est bien meilleure.


2
Si vous vous sentez inspiré par q/, vous devriez également jouer avec q:. Les deux sont vraiment pratiques! (Pas vraiment lié à cette question, cependant.)
Micah Elliott

Merci, Micah. Je connaissais déjà 'q:', bien que je ne l'utilise pas beaucoup. Mais «q /» a été complètement manqué dans mon éducation vim, et je pense qu'il sera beaucoup utilisé.
Stabledog

2

Si vous appuyez sur Ctrl+ Enteraprès avoir appuyé sur quelque chose comme "/ wordforsearch", vous pouvez trouver le mot "wordforsearch" dans la ligne actuelle. Appuyez ensuite sur npour le match suivant; appuyez sur Npour le match précédent.


1
"Lorsque nous exécutons une recherche, Vim balaye vers l'avant à partir de la position actuelle du curseur, s'arrêtant sur la première correspondance qu'il trouve." Comme le souligne Practical Vim.
mandrin basse
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.