2010-12-08 11 views
10

Con muchos tampones abierta, necesito una manera sencilla de buscar todas las memorias intermedias para una expresión regular y navegar por el resultado de la búsqueda (lista rápida?)Buscar/Grep en todos los tampones VI

sé que puedo :bufdo de comandos, y se es fácil de buscar y reemplazar con %s, pero no puedo encontrar una forma de hacer una simple búsqueda y luego navegar por los resultados.

Encontré complementos para eso (por ejemplo, búfer), pero me sorprendería si esta simple tarea no es compatible nativamente con un truco vim .. ¿o sí?

+0

duplicado posible de [¿Cómo busco los buffers abiertos en Vim?] (Http://stackoverflow.com/questions/11975174/how-do-i-search-the- open-buffers-in-vim) –

Respuesta

4

:grep & co. poblarán el búfer QuickFix, que permite una navegación rápida entre los resultados.

+2

Puede usar eso para grep en BUFFERS y no en archivos –

+3

@Samer Abukhait: La documentación sugiere ': call setqflist ([]) | bufdo grepadd! algo% ', con algo de trabajo adicional para manejar más casos. – ephemient

+0

grepadd! Parece funcionar. La documentación no es lo suficientemente clara como para asignarla al comportamiento deseado o responder preguntas como (¿cuáles son los elementos de sintaxis? Y/o ¿puedo usar otra cosa que no sea "%"?). Pero en todos los casos, ahora tengo una manera de hacer lo que quería, ¡y por eso te agradezco! –

2

"Encontré complementos para eso (por ejemplo, búfer), pero me sorprendería si esta simple tarea no se admite de forma nativa con un truco vim ... ¿o sí?"

No es que yo sepa. Y la existencia de múltiples complementos que intentan ofrecer esta funcionalidad tiende a confirmar eso. . .

¿Qué plugins has probado y qué les han faltado?

http://www.vim.org/scripts/script.php?script_id=2545 
http://www.vim.org/scripts/script.php?script_id=2255 

Además, solo para estar seguro, usted está al tanto de vimgrep, ¿verdad? Vimgrep es un comando interno que carga archivos en búferes y greps en los búferes, con resultados en la ventana quickfix. No lo he confirmado, pero supongo que si un archivo buscado ya está abierto en un búfer, Vimgrep no lo vuelve a cargar, al menos no si tiene un indicador 'nomodificado'. Si es así, una forma de usar Vimgrep para una agrupación de búfer rápida y fácil sería simplemente crear una lista de archivos para Vimgrep usando la salida del comando: buffers.

3

de :help grepadd

:grepa[dd][!] [arguments] 
      Just like ":grep", but instead of making a new list of 
      errors the matches are appended to the current list. 
      Example: 
       :call setqflist([]) 
       :bufdo grepadd! something % 
      The first command makes a new error list which is 
      empty. The second command executes "grepadd" for each 
      listed buffer. Note the use of ! to avoid that 
      ":grepadd" jumps to the first error, which is not 
      allowed with |:bufdo|. 
      An example that uses the argument list and avoids 
      errors for files without matches: 
           :silent argdo try 
        \ | grepadd! something % 
        \ | catch /E480:/ 
        \ | endtry"