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"?
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.
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.
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()"
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.
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.
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.
"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.
:help
.:help /
affiche de l'aide sur la recherche et la réponse à votre question apparaît un peu en bas de la page.Réponses:
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
vimtutor
commande à partir de votre terminal, qui lancera un didacticiel des commandes Vim de base.Rob Wells conseils au sujet *et #est également très pertinente.
la source
n
comme la plupart des opérateurs vim peuvent être préfixés par un nombre pour répéter la commande. Si vous tapez,10n
il passera au 10e résultat (après le premier). Cela fonctionne également pour tous les opérateurs de mouvement comme3j
descendre 3 lignes.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.
la source
n
etN
vous 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.)/Func
, demandez-moi de le faireSomeFunc
, puis appuyez sur '*' pour passer à l'instance suivanteSomeFunc
lorsque l'instance suivante deFunc
est enSomeOtherFunc
./\<foo\>
cela ne correspond pas"className::foo()"
Quand je commençais, j'avais besoin de regarder une démo .
Comment rechercher dans Vim
/
la source
*
est incorrecte. C'est-à-dire un fichieraa aaa
. Recherche/aa
, vous devez correspondre. Lors de la première correspondance, appuyez sur pour*
modifier le terme de recherche.Vous cherchez peut-être la nclé.
la source
La frappe nira au match suivant.
la source
Comme indiqué, il existe plusieurs façons de rechercher:
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 avecC-p
/C-n
. Encore plus utileq/
, 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: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:Je me souviens facilement de celui-ci
z
car j'avais l'habitude de taper constamment/zz<CR>
(ce qui est un événement rare et rapide) pour effacer ma surbrillance. Mais la:noh
cartographie est bien meilleure.la source
q/
, vous devriez également jouer avecq:
. Les deux sont vraiment pratiques! (Pas vraiment lié à cette question, cependant.)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.
la source