Comment trouver du texte dans de nombreux tampons ouverts?

36

Disons que j'ai 10 tampons ouverts et que je veux trouver toutes les occurrences de blahdans les 10 tampons. Comment je ferais ça?

nixeagle
la source

Réponses:

31

Si vous vous en tenez aux commandes Emacs intégrées, vous pouvez utiliser multi-occurou multi-occur-in-matching-buffers( M-x multi-occur- TAB RET). multi-occurvous donne un contrôle précis en vous invitant à utiliser chaque mémoire tampon, mais c'est fastidieux. multi-occur-in-matching-buffersvous permet d'entrer une expression rationnelle pour faire correspondre les noms de fichiers (elle recherche uniquement dans les mémoires tampons qui visitent des fichiers); entrez .comme expression rationnelle de fichier pour effectuer une recherche dans tous les tampons qui visitent un fichier.

Il existe également des fonctions de recherche incrémentielle dans une liste de mémoires tampons ou de fichiers, mais elles sont fastidieuses, multi-occurcar elles nécessitent la liste des mémoires tampons ou des fichiers un par un.

Vous pouvez utiliser pour rechercher dans tous les fichiers d'un répertoire ou dans des fichiers correspondant à certains modèles, qu'ils soient ouverts ou non grep. Il existe des variantes rgrepet grep-findde rechercher récursivement les sous-répertoires.

Gilles, arrête de faire le mal
la source
5
+1 pour mentionner que .c'est l'expression régulière qui correspond à tous les fichiers.
user2699
12

En plus de ce que d’autres ont mentionné, voici deux autres ressources pour cela.

  1. M-x multi-isearch-buffersou M-x multi-isearch-buffers-regexp(vanilla Emacs) - Recherche incrémentielle sur plusieurs tampons.

  2. Si vous utilisez des glaçons, vous pouvez utiliser icicle-search(ou icicle-occurun nombre quelconque d'autres icicle-searchspécialisations) pour effectuer une recherche dans plusieurs fichiers ou tampons.

(En plus de la recherche et du remplacement dans des mémoires tampons arbitraires , il existe bien sûr des commandes qui le font dans plusieurs fichiers . D'autres l'ont mentionné grep, par exemple. Et il y a bien sûr Adans Dired. Mais vous n'avez pas posé de question sur la recherche de fichiers.)

A dessiné
la source
10

Cela peut être fait avec helm via la commande helm-multi-occur. Vous pouvez installer helm depuis melpa , puis appeler la commande comme suit:

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

Cela ouvrira helm-multi-occuret sélectionnera tous les tampons. Au lieu d'utiliser M-apour marquer tous les tampons, vous pouvez éventuellement les sélectionner un à un. Parcourez la liste avec C-net C-pet marquez les tampons avec C-SPC. Une fois que tous les tampons sont marqués, appuyez sur RETpour accepter les tampons marqués et lancer la recherche.

Si vous ajoutez les éléments suivants à votre fichier d'initialisation:

(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)))))

Vous pouvez ensuite lier la commande my-helm-multi-occur-bufferspour effectuer plusieurs événements dans tous les tampons sauvegardés par des fichiers.

nispio
la source
3
Vous pouvez également vouloir regarder le helm-swooppaquet dans MELPA. Il fournit cette fonctionnalité et permet également une édition rapide des résultats.
Vamsi
9

swiper-alldu paquet swiper fournit un outil pour cela. C'est même incrémental, donc il se met à jour au fur et à mesure que vous tapez.

entrez la description de l'image ici

Wilfred Hughes
la source
c'est bien ! bonne trouvaille
environ
6

Vous pouvez utiliser le ibuffermode pour marquer les tampons que vous souhaitez rechercher. Appelez ibuffer-do-isearch(lié à M-s a C-spar défaut) pour rechercher du texte ou ibuffer-do-isearch-regexpsi vous devez rechercher une expression régulière.

Si vous n'êtes pas familier avec ibuffer, lancez- le et jetez un coup d'œil au menu Marquer pour voir toutes les façons dont vous pouvez choisir un ensemble de mémoires tampons sur lesquelles vous souhaitez travailler.

glucas
la source
1

Voici une autre façon avec la barre: M-x helm-mini M-a C-s blah. Après avoir appelé helm-mini, M-amarquera tous les tampons d'ouverture puis C-s blahfera plusieurs sur les tampons marqués.

Xuchunyang
la source
0

En outre, une solution utilisant le mode helm existe helm-swoop.

Utilisation

M-x helm-swoop RET

puis, pour rechercher dans tous les tampons ouverts, tapez

M-i

Ensuite, tapez simplement blahpour le rechercher dans tous les tampons. Dans une autre fenêtre, toutes les occurrences seront affichées.

Alternativement, vous pouvez simplement taper

M-x helm-multi-swoop

puis, marquer tous les tampons que vous souhaitez rechercher avec M-SPCou C-SPC, appuyez sur RETet recherche blah.

Lucas Moreira
la source