¿Cómo encuentro texto en muchos búferes abiertos?

36

Digamos que tengo 10 buffers abiertos, y quiero encontrar todas las ocurrencias de blahlos 10 buffers. ¿Cómo haría esto?

nixeagle
fuente

Respuestas:

31

Siguiendo los comandos integrados de Emacs, puede usar multi-occuro multi-occur-in-matching-buffers( M-x multi-occur- TAB RET). multi-occurle brinda un control preciso al solicitar que se use cada búfer, pero es tedioso. multi-occur-in-matching-buffersle permite ingresar una expresión regular para que coincida con los nombres de los archivos (solo busca en los buffers que están visitando archivos); ingrese .como el archivo regexp para buscar en todos los buffers que están visitando un archivo.

También hay funciones para la búsqueda incremental en una lista de buffers o archivos, pero son tediosos, multi-occurya que requieren enumerar los buffers o archivos uno por uno.

Para buscar en todos los archivos de un directorio, o en archivos que coincidan con ciertos patrones, estén abiertos o no, puede usarlos grep. Hay variantes rgrepy grep-findpara buscar subdirectorios de forma recursiva.

Gilles 'SO- deja de ser malvado'
fuente
55
+1 por mencionar que .es la expresión regular que coincide con todos los archivos.
usuario2699
12

Además de lo que otros han mencionado, aquí hay otros dos recursos para esto.

  1. M-x multi-isearch-bufferso M-x multi-isearch-buffers-regexp(vanilla Emacs): búsqueda incremental en varios buffers.

  2. Si usa Icicles , puede usar icicle-search(o icicle-occurcualquier otra icicle-searchespecialización) para buscar en múltiples archivos o buffers.

(Además de buscar y reemplazar en búferes arbitrarios , por supuesto, hay comandos que hacen eso en varios archivos . Otros han mencionado grep, por ejemplo. Y, por supuesto, existe Aen Dired. Pero no preguntó sobre la búsqueda de archivos).

Dibujó
fuente
10

Esto se puede hacer con helm a través del comando helm-multi-occur. Puede instalar helm desde melpa y luego llamar al comando de la siguiente manera:

M-x helm-multi-occur RET M-a RET

Esto se abrirá helm-multi-occury luego seleccionará todos los buffers. En lugar de usar M-apara marcar todos los buffers, opcionalmente puede seleccionar los buffers de interés uno a la vez. Navegue hacia arriba y hacia abajo en la lista con C-ny C-py marque los buffers con C-SPC. Una vez que todos los búferes estén marcados, presione RETpara aceptar los búferes marcados y comenzar a buscar.

Si agrega lo siguiente a su archivo init:

(require 'helm-regexp)
(eval-after-load "helm-regexp"
  '(setq helm-source-moccur
    (helm-make-source "Moccur" 'helm-source-multi-occur :follow 1)))

;; (source: http://stackoverflow.com/q/14726601)
(defun my-helm-multi-occur-buffers ()
  "multi-occur in all buffers backed by files."
  (interactive)
  (helm-multi-occur
   (delq nil
     (mapcar (lambda (b)
           (when (buffer-file-name b) (buffer-name b)))
         (buffer-list)))))

Luego puede vincular el comando my-helm-multi-occur-bufferspara hacer una ocurrencia múltiple en todos los buffers respaldados por archivos.

nispio
fuente
3
También es posible que desee ver el helm-swooppaquete en MELPA. Proporciona esta funcionalidad y permite la edición rápida de los resultados también.
Vamsi
9

swiper-alldel paquete swiper proporciona una herramienta para hacer esto. Incluso es incremental, por lo que se actualiza a medida que escribe.

ingrese la descripción de la imagen aquí

Wilfred Hughes
fuente
esto es genial ! bonito hallazgo
abourget
6

Puede usar el ibuffermodo para marcar los búferes que desea buscar. Llame ibuffer-do-isearch(vinculado M-s a C-sde forma predeterminada) para buscar texto, o ibuffer-do-isearch-regexpsi necesita buscar una expresión regular.

Si no está familiarizado ibuffer, enciéndalo y eche un vistazo al menú Mark para ver todas las formas en que puede elegir un conjunto de buffers en los que operar.

glucas
fuente
1

Aquí es otra forma con el timón: M-x helm-mini M-a C-s blah. Después de invocar helm-mini, M-amarcará todos los búferes de apertura y luego C-s blahse producirá una ocurrencia múltiple en los búferes marcados.

xuchunyang
fuente
0

Además, una solución usando helm-mode es con helm-swoop.

Utilizar

M-x helm-swoop RET

luego, para buscar en todos los buffers abiertos, escriba

M-i

luego, simplemente escriba blahpara buscarlo en todos los buffers. En una ventana diferente mostrará todas las ocurrencias.

Alternativamente, solo puede escribir

M-x helm-multi-swoop

luego, marque todos los búferes con los que desea buscar M-SPCo C-SPC, presione RETy busque blah.

Lucas Moreira
fuente