2010-05-27 5 views
12

Comment limiter la portée de la recherche dans Vim au bloc fonction/classe/code dans lequel se trouve le curseur, sans avoir à déterminer quels sont les numéros de ligne? Etre capable de chercher dans la sélection visuelle serait également utile, car il existe des méthodes pour sélectionner le bloc de code courant.Limitation de la portée de recherche du code dans Vim

(similaire à this question, mais plus générique)

Répondre

12

Je vais simplement copier et coller le contenu entier de "Searching with/and ?" (within a visual selection) from the Vim Tips Wiki.

En mode visuel, / et ? va mettre à jour la sélection visuelle comme toute autre commande de curseur- (que est, en mode visuel, la recherche va étendre la sélection).

Pour effectuer une recherche au sein même de la sélection visuelle , vous aurez besoin d'utiliser l'atome \%V, ou utiliser les marqueurs définis par la sélection visuelle avec les \%>'< et \%<'> atomes. Ceci est mieux fait en laissant le visuel sélection avec Esc avant d'entrer votre recherche. Vous pouvez envisager un mappage pour laisser automatiquement sélection visuelle et entrez les atomes appropriés. Par exemple:

:vnoremap <M-/> <Esc>/\%V 

En utilisant cette application, vous pouvez appuyer sur Alt - / afin de remplir automatiquement dans une « plage » pour votre recherche comme en utilisant une commande Ex avec :. Pour utiliser , passez à la première ligne et appuyez sur V pour commencer sélection visuelle par ligne. Descendre (appuyez sur j pour une ligne ou } pour un paragraphe , etc.). Lorsque vous avez sélectionné la zone que vous souhaitez rechercher, appuyez sur Alt - /. La sélection visuelle sera supprimée, et une commande de recherche commencera . Vous verrez:

/\%V 

Ajouter ce que vous voulez trouver, puis appuyez sur Entrée . Par exemple, vous pouvez entrer vert et voir

/\%Vgreen 

Lorsque vous appuyez sur Entrée , sera mis en surbrillance chaque occurrence de « vert », mais seulement dans la région que vous aviez sélectionnés.

Voici deux exemples supplémentaires qui n'utilisent pas de sélection visuelle: . La première commande recherche uniquement dans les lignes 10 à 20 inclusivement. La seconde recherche seulement entre les marques a et b.

/\%>9l\%<21lgreen 
/\%>'a\%<'bgreen 
+0

J'aurais trouvé ça. * Facepalm * – Walter

1

Par souci de concision:

" tldr; 
v i { <ESC> /\%Vsearch-term 

" Search for search-term within the current code block (defined by curly braces {}). 
" Begin in normal mode, then enter the following: 

" enter visual mode 
v 

" look for stuff in-between the current... 
i 

" curly braces enclosure 
{ 

" (now the enclosure should be highlighted) 

" exit visual mode 
<ESC> 

" search the last visual mode selection for search-term 
/\%Vsearch-term 

" note: to search within other enclosures, you can substitute curly braces for: 
" - parenthesis, 
" - square brackets, 
" - or other enclosure pair characters