2010-05-27 13 views
12

¿Cómo puedo limitar el ámbito de búsqueda en Vim al bloque de función/clase/código en el que se encuentra actualmente el cursor, sin tener que averiguar cuáles son los números de línea? Ser capaz de buscar en la selección visual también lo haría, ya que hay métodos para seleccionar el bloque de código actual.Limitación del alcance de búsqueda para el código en Vim

(similares a this pregunta, pero más genérico)

Respuesta

12

voy a copiar y pegar todo el contenido de "Searching with/and ?" (within a visual selection) from the Vim Tips Wiki.

En el modo visual, / y ? actualizará la selección visual al igual que cualquier otro otro comando de movimiento del cursor (que es, cuando está en modo visual, buscando ampliará la selección).

Con el fin de buscar en realidad dentro de la selección visual , tendrá que utilizar el átomo \%V o utilice los marcadores definida por la selección visual con los \%>'< y \%<'> átomos. Esto es mejor hecho dejando la selección visual con Esc antes de ingresar a su búsqueda. Es posible que desee considerar una asignación para dejar automáticamente selección visual e introduzca los átomos apropiados. Por ejemplo:

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

El uso de este mapeo, puede pulsar Alt - / el fin de llenar automáticamente en una "gama" de su búsqueda al igual que utilizando un comando Ex con :. Para usar esto, vaya a la primera línea de interés y presione V para iniciar selección visual en línea. Desplácese hacia abajo (presione j para una línea o } para un párrafo , etc.). Cuando tiene seleccionado el área que desea buscar, presione Alt - /. Se eliminará la selección visual y comenzará un comando de búsqueda . Verá:

/\%V 

agregar lo que quiere encontrar, a continuación, pulse Intro . Por ejemplo, puede introducir verde y ver:

/\%Vgreen 

Al pulsar Enter , cada vez que aparece de "verde" se resaltará, pero sólo en el área que tenía previamente seleccionados.

Aquí hay otros dos ejemplos que no utilizan una selección visual. El primer comando solo busca en las líneas 10 a 20 inclusive. El segundo busca solo entre las marcas a y b.

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

Yo he encontrado que. * facepalm * – Walter

1

Por razones de brevedad:

" 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 
Cuestiones relacionadas