2010-02-22 20 views
64

¿Hay alguna forma fácil/rápida a "tirón" en el registro de vim "última búsqueda" ("/)Vim - un tirón en la búsqueda registrarse

De la documentación vim, parece que la respuesta es no, pero que se puede asignar a través de un "let" comando:

It is writable with ":let", you can change it to have 'hlsearch' highlight 
other matches without actually searching. You can't yank or delete into this 
register. 

lo ideal sería que lo que me gustaría hacer es algo como:

"/5yw 

que tirar de los próximos 5 palabras bajo el cursor puesto & th em en el último buffer de búsqueda

Alternativamente, si hay una manera de buscar los contenidos de un registro nombrado, eso también funcionaría. En otras palabras, si pudiera:

"A5yw 

y luego buscar lo que está en el registro A, eso también funcionaría.

Lo más cerca que puedo llegar es entrar en un registro con nombre & y luego copiar ese registro en el último registro de búsqueda, p.

"A5yw 
:let @/[email protected] 

A riesgo de hacer una pregunta mucho más tiempo, quiero decir que no siempre es 5 palabras que me gustaría "tirón & búsqueda" - a veces es 17 caracteres, a veces es hasta el final de la línea, etc ... así que una macro codificada no me da la flexibilidad que quisiera.

Respuesta

81

Después de presionar / para ingresar una cadena de búsqueda, puede usar Ctrl-R y luego escribir la letra que representa el registro que desea usar.

por ejemplo.

  • En primer lugar, "Ayw dar un tirón a una palabra en el registro A
  • Entonces, / ^R A para poner el contenido del registro A en la cadena de búsqueda.
+0

Este de trabajos de curso, pero parece que el PO en realidad no puede querer buscar, solo obtener el resaltado. Si ese es el caso, un operador personalizado sería el camino a seguir. – Cascabel

+0

de Super - gracias ar ... eso es exactamente lo que necesitaba Gracias por la solución concisa (así, con las limitaciones que la solución perfecta no es realmente posible en el primer lugar.). – Dan

+0

@ Jefromi - gracias por su respuesta (abajo) y su ayuda. Lo siento, es posible que no haya sido lo suficientemente claro en mi pregunta original, pero en realidad quería esto para buscar y de hecho tengo el resaltado desactivado. ¡Gracias por la entrada! – Dan

5

Así que, básicamente, una versión extendida de los comandos # y *, ¿verdad? Parece que quieres definir un operador personalizado (un comando que espera un movimiento). Nunca he hecho esto, pero encontré un plugin que parece que podría hacerlo más fácil. Hay algunos ejemplos proporcionados.

9

estoy usando siguiente código para que:

vnoremap <silent>* <ESC>:call VisualSearch('/')<CR>/<CR> 
vnoremap <silent># <ESC>:call VisualSearch('?')<CR>?<CR> 

    function! VisualSearch(dirrection) 
     let l:[email protected]@ 
     normal! gvy 
     let l:search=escape(@@, '$.*/\[]') 
     if a:dirrection=='/' 
      execute 'normal! /'.l:search 
     else 
      execute 'normal! ?'.l:search 
     endif 
     let @/=l:search 
     normal! gV 
     let @@=l:register 
    endfunction 
+0

en caso de que no está claro, esto le permite seleccionar un texto en el modo visual, y el uso * o # para buscar ese texto. –

23

Si no se ha utilizado ningún registro para almacenar el texto pegado vim utiliza 0 registro. Puede buscarlo escribiendo Ctrl-R 0 después de /.

Un ejemplo más complicado.Digamos que desea buscar en otro búfer para el texto dentro de las citas que se encuentra bajo el cursor en este momento:

  • Usted puede hacer eso con yi" (cita interior tirón)
  • Ir a la memoria intermedia en la que desea Búsqueda
  • Tipo /Ctrl-R 0
1

Búsqueda de una selección:

si usted quiere pegar primero una sección de una línea, a continuación, utilizar "v" y se mueven con cursores hasta que haya marcado lo que desea, y luego presione Y para tirón y ahora la selección está en el registro 0

a continuación, puede escribir /Ctrl-R 0

Cuestiones relacionadas