Como encontro texto em muitos buffers abertos?

36

Digamos que tenho 10 buffers abertos e desejo encontrar todas as ocorrências de blahtodos os 10 buffers. Como eu faria isso?

nixeagle
fonte

Respostas:

31

Aderindo aos comandos internos do Emacs, você pode usar multi-occurou multi-occur-in-matching-buffers( M-x multi-occur- TAB RET). multi-occurfornece controle fino solicitando que cada buffer seja usado, mas é tedioso. multi-occur-in-matching-bufferspermite inserir um regexp para corresponder aos nomes dos arquivos (ele pesquisa apenas em buffers que estão visitando arquivos); digite .como o arquivo regexp para procurar em todos os buffers que estão visitando um arquivo.

Também existem funções para pesquisa incremental em uma lista de buffers ou arquivos, mas são tediosas como multi-occurexigem a listagem dos buffers ou arquivos, um por um.

Para pesquisar todos os arquivos em um diretório ou arquivos que correspondam a determinados padrões, estejam eles abertos ou não, você pode usar grep. Existem variantes rgrepe grep-findpara procurar subdiretórios recursivamente.

Gilles 'SO- parar de ser mau'
fonte
5
+1 por mencionar que .é a expressão regular para corresponder a todos os arquivos.
user2699
12

Além do que os outros mencionaram - aqui estão dois outros recursos para isso.

  1. M-x multi-isearch-buffersou M-x multi-isearch-buffers-regexp(vanilla Emacs) - pesquisa incremental em vários buffers.

  2. Se você usar Sincelos , poderá usar icicle-search(ou icicle-occurqualquer outro número de icicle-searchespecializações) para pesquisar em vários arquivos ou buffers.

(Além de pesquisar e substituir buffers arbitrários , é claro que existem comandos que fazem isso em vários arquivos . Outros já mencionaram grep, por exemplo. E é claro que há Ano Dired. Mas você não perguntou sobre a busca de arquivos.)

Desenhou
fonte
10

Isso pode ser feito com o comando através do comando helm-multi-occur. Você pode instalar o helm a partir do melpa e, em seguida, chamar o comando da seguinte maneira:

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

Isso será aberto helm-multi-occure, em seguida, selecione todos os buffers. Em vez de usar M-apara marcar todos os buffers, você pode opcionalmente selecionar os buffers de interesse, um de cada vez. Navegue para cima e para baixo na lista com C-ne C-pe marque os buffers com C-SPC. Depois que todos os buffers estiverem marcados, pressione RETpara aceitar os buffers marcados e começar a pesquisar.

Se você adicionar o seguinte ao seu arquivo 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)))))

Em seguida, você pode vincular o comando my-helm-multi-occur-bufferspara executar uma ocorrência múltipla em todos os buffers suportados por arquivos.

nispio
fonte
3
Você também pode querer consultar o helm-swooppacote no MELPA. Ele fornece essa funcionalidade e permite a edição rápida dos resultados também.
Vamsi
9

swiper-alldo pacote swiper fornece uma ferramenta para fazer isso. É ainda incremental, por isso é atualizado conforme você digita.

insira a descrição da imagem aqui

Wilfred Hughes
fonte
isso é ótimo ! bom encontrar
abourget 16/03
6

Você pode usar o ibuffermodo para marcar os buffers que deseja pesquisar. Ligue ibuffer-do-isearch(vinculado M-s a C-spor padrão) para procurar texto ou ibuffer-do-isearch-regexpse precisar procurar uma expressão regular.

Se você não estiver familiarizado ibuffer, inicie-o e dê uma olhada no menu Marcar para ver todas as maneiras pelas quais você pode escolher um conjunto de buffers nos quais operar.

glucas
fonte
1

Aqui é uma outra maneira com leme: M-x helm-mini M-a C-s blah. Após a chamada helm-mini, M-amarcará todos os buffers de abertura e C-s blahocorrerá várias vezes nos buffers marcados.

xuchunyang
fonte
0

Além disso, uma solução usando o modo helm está com helm-swoop.

Usar

M-x helm-swoop RET

Em seguida, para pesquisar em todos os buffers abertos, digite

M-i

digite apenas blahpara pesquisar em todos os buffers. Em uma janela diferente, serão exibidas todas as ocorrências.

Como alternativa, você pode apenas digitar

M-x helm-multi-swoop

marque todos os buffers que deseja pesquisar M-SPCou C-SPCpressione RETe pesquise blah.

Lucas Moreira
fonte