Obtendo o número de ocorrências durante a pesquisa incremental (Cs / isearch-forward)

17

Inspirado em navegadores modernos, eu adoraria ver quantas ocorrências existem de alguma sequência de caracteres quando a procurar - como o "10 de 37" no canto superior direito da captura de tela abaixo.

Chrome 10 de 37

Existe uma maneira de conseguir isso no Emacs? Presumivelmente, para não ser lento, ele deve ser executado somente após algum tempo ocioso.

ShreevatsaR
fonte
Essa é uma duplicata dessas perguntas marcadas com [emacs] no StackOverflow: stackoverflow.com/q/14764130/729907 , stackoverflow.com/q/22479140/729907 . Aparentemente, não pode ser fechado como duplicado, então acho que isso significa que as pessoas podem copiar os zilhões de outras perguntas marcadas com SO [emacs] ... Bonjour les degats.
Drew
@ Drew: Obrigado por esses ponteiros. Obviamente, não é razoável considerar as perguntas como duplicadas em sites diferentes, assim como você não consideraria uma pergunta aqui uma "duplicata" de algo solicitado em outro lugar (por exemplo, em gnu.emacs.help). Sim, a esperança para este site é que, se boas perguntas do SO forem reproduzidas aqui, ele melhore a qualidade deste site. Eu não sabia que a pergunta havia sido feita no SO, mas é definitivamente uma boa ideia alguém com tempo para começar a fazer (e responder) as melhores perguntas aqui. Talvez deva haver uma maneira de migrar perguntas automaticamente.
ShreevatsaR
Por quê? Por que é bom reproduzir as "boas perguntas do SO" aqui? Qual é o objetivo? Esta versão beta testa se faz sentido ter um site Emacs separado, em vez de usar a tag [emacs] no SO etc. Se "provarmos" que este site é significativo apenas copiando perguntas de outros lugares, o que mostramos? Isso não faz sentido para mim. E por que queremos encorajar esse comportamento? Quem ajuda (além da copiadora)? Se quisermos migrar coisas (que fazemos não , durante Beta), em seguida, pelo menos, a pergunta original e entrevistados seriam mantidos no loop.
Drew
@Drew: O objetivo é ter um bom lugar para fazer e responder perguntas sobre o Emacs. Todos os sites da SE são incentivados a "propagar" o site durante a versão beta (privada) com boas perguntas e respostas, para que os visitantes posteriores do site saibam que tipo de conteúdo é apropriado. Enfim, eu só vim aqui porque ouvi falar desse site e pensei em fazer as perguntas que estavam me incomodando no momento; esses pensamentos sobre questões de migração foram estimulados pelas suas observações no primeiro comentário acima.
ShreevatsaR
ESTÁ BEM. Por favor, leve-o ao Meta , se você tiver algo mais a dizer.
Tirou

Respostas:

15

O anzupacote faz isso.

O anzu.el fornece um modo secundário que exibe as informações de correspondência atual e total de correspondências na linha de modo em vários modos de pesquisa.

captura de tela

Kaushal Modi
fonte
Obrigado! Adicionei o MELPA e instalei o anzu, liguei e ele parece estar funcionando. Vou esperar para ver se mais alguém tem uma solução que não dependa de nenhum pacote (pelo menos, pacotes que não estão no ELPA).
ShreevatsaR
13

Aqui estão algumas possibilidades que não são muito lisas, que têm a vantagem de trabalhar com um Emacs padrão.

Se você pressionar M-s o( isearch-occur) durante uma pesquisa incremental, um buffer Occur será exibido com a expressão de pesquisa atual. No topo do *Occur*buffer está o número de linhas correspondentes.

O comando how-manyexibe o número de ocorrências de uma regexp (incluindo ocorrências repetidas). Infelizmente, ele não está integrado à pesquisa incremental. Aqui está uma integração de pesquisa de prova de conceito: pressione M-s #durante a pesquisa para mostrar o número de correspondências.

(defun isearch-how-many (regexp)
  "Run `how-many' using the last search string as the regexp.
Interactively, REGEXP is constructed as with `isearch-occur'."
  (interactive
   (list (cond
      ((functionp isearch-word)
       (funcall isearch-word isearch-string))
      (isearch-word (word-search-regexp isearch-string))
      (isearch-regexp isearch-string)
      (t (regexp-quote isearch-string)))))
  (how-many regexp nil nil (interactive-p)))
(define-key isearch-mode-map [?\M-s ?#] 'isearch-how-many)
Gilles 'SO- parar de ser mau'
fonte
Isso ... sim. Não é exatamente o que eu quero, mas é valioso saber o melhor possível com o estoque Emacs, obrigado.
ShreevatsaR 10/10
Isso parece mostrar apenas o número de linhas correspondentes, não o número de correspondências.
xuhdev
0

Eu gostaria de sugerir Swiper !

O Swiper é uma alternativa ao isearch que usa o ivy para mostrar uma visão geral de todas as correspondências.

insira a descrição da imagem aqui

serghei
fonte