web-dev-qa-db-fra.com

VIM: rechercher uniquement entre des numéros de ligne spécifiques?

Je sais qu'avec la commande de substitution de Vim, vous pouvez spécifier une plage de lignes:

:12,24s/search/replace

Je souhaite également pouvoir spécifier une plage avec des recherches normales. Quelque chose comme

:12,24/search

Puisque cela ne semble pas fonctionner (du moins sur ma configuration Vim), est-ce que quelqu'un sait comment y parvenir?

Je vous remercie.

35
Thomas
:help search-range

et alors

:help /\%>l

donc essentiellement:

/\%>12l\%<24lsearch
28
akira

Excellente réponse d'Akira. Mais après quelques recherches, j'ai trouvé une alternative. Ce n'est pas aussi élégant mais plus facile à saisir:

 :12,24g/search/

Cela vous donnera une invite gênante mais se retrouvera sur la première ligne de la plage contenant la chaîne recherchée.

35
Carl Smotricz

Avez-vous vraiment besoin de numéros de ligne? Une autre façon pourrait être de sélectionner la plage visuellement.

  1. sélectionnez la plage en utilisant v, v ou quoi que
  2. appuyez sur ESC pour désélectionner la plage 
  3. effectuez une recherche en utilisant /\%Vwhat_to_search pour rechercher 'what_to_search' dans la plage sélectionnée précédemment.

C’est moins de taper, mais pas directement ce que vous avez demandé ;-)

Voir: help% V

[EDIT] Excellent, je viens d'apprendre que la plage dans laquelle effectuer la recherche peut être modifiée après avoir effectué la recherche en sélectionnant une autre plage, en désélectionnant à nouveau cette plage en appuyant sur Echap et sur n pour répéter la recherche. Vim est vraiment toujours bon pour les surprises agréables.

19
Habi

Continuez à utiliser la commande de substitution, mais ajoutez les indicateurs gc à votre exemple d'origine.

:12,24s/search//gc

De :help search-range

[Pour effectuer une recherche dans une plage], utilisez la commande ": Substitute" avec l'indicateur 'c' . 

Exemple: :.,300s/Pattern//gc 

Cette commande va chercher à partir de la position du curseur Jusqu'à la ligne 300 pour "Motif". Lors du match, vous pouvez taper 'Q' pour arrêter ou 'n' pour rechercher le prochain Match.

16
michaelmichael

Si les marques indiquent a et b, la recherche peut être limitée à la région située entre a et b en utilisant

/\%>'a\%<'bSearchText

Ceci peut être simplifié avec une cmap

cmap vmsab /\%>'a\%<'b
cmap vmscd /\%>'c\%<'d
4
shankar

En utilisant plug-in Narrow Region nous pouvons ouvrir un tampon temporaire avec la plage que nous devons rechercher ou modifier

:900,1000NarrowRegion

Ensuite, nous pouvons faire une recherche

/thing

Ou un changement et réécrire le tampon

:%s/this/that/g
:wq
0
SergioAraujo