Obtention du nombre d'occurrences, pendant la recherche incrémentielle (Cs / isearch-forward)

17

Inspiré par les navigateurs modernes, j'aimerais pouvoir voir combien d'occurrences il y a d'une chaîne, quand je la recherche - comme le "10 sur 37" dans le coin supérieur droit de la capture d'écran ci-dessous.

Chrome 10 sur 37

Existe-t-il un moyen d'obtenir cela dans Emacs? Vraisemblablement, pour ne pas être lent, il ne devrait fonctionner qu'après un certain temps d'inactivité.

ShreevatsaR
la source
Il s'agit d'un double de ces questions marquées par [emacs] sur StackOverflow: stackoverflow.com/q/14764130/729907 , stackoverflow.com/q/22479140/729907 . Apparemment, il ne peut pas être fermé en double, donc je suppose que cela signifie que les gens peuvent copier les zillions d'autres questions marquées SO [emacs] ... Bonjour les degats.
Tiré
@Drew: Merci pour ces pointeurs. De toute évidence, il n'est pas raisonnable de considérer les questions comme des doublons sur différents sites Web, pas plus que vous ne considéreriez une question ici comme un "doublon" de quelque chose posé ailleurs (par exemple sur gnu.emacs.help). Oui, l'espoir pour ce site est que si de bonnes questions de SO sont reproduites ici, cela devrait améliorer la qualité de ce site. Je ne savais pas que la question avait été posée sur SO, mais c'est certainement une bonne idée pour quelqu'un qui a le temps de commencer à poser (et à répondre) les meilleures questions ici. Il devrait peut-être y avoir un moyen de migrer automatiquement les questions.
ShreevatsaR
Pourquoi? Pourquoi est-ce une bonne chose de reproduire ici les "bonnes questions de SO"? Quel est le but? Cette bêta teste s'il est logique d'avoir un site Emacs séparé, par opposition à l'utilisation de la balise [emacs] sur SO etc. Si nous «prouvons» que ce site est significatif en copiant simplement des questions d'ailleurs, qu'avons-nous montré? Cela n'a aucun sens pour moi. Et pourquoi voudrions-nous encourager un tel comportement? Qui aide-t-il (à part le copieur)? Si nous voulions migrer des trucs (ce que nous ne faisons pas , lors de la bêta), au moins l'interrogateur et les répondants d'origine seraient tenus au courant.
Drew
@Drew: L'objectif est d'avoir un bon endroit pour poser et répondre aux questions sur Emacs. Tous les sites SE sont encouragés à "semer" le site pendant la version bêta (privée) avec de bonnes questions et réponses, afin que les visiteurs ultérieurs du site sachent quel type de contenu est approprié. Quoi qu'il en soit, je ne suis venu ici que parce que j'ai entendu parler de ce site et que j'ai pensé à poser les questions qui me dérangeaient en ce moment; ces réflexions sur la migration des questions ont été stimulées par vos remarques dans le premier commentaire ci-dessus.
ShreevatsaR
D'ACCORD. Apportez-le à Meta , si vous avez quelque chose à ajouter.
Drew

Réponses:

15

Le anzupackage fait cela.

anzu.el fournit un mode mineur qui affiche les informations de correspondance actuelle et de correspondance totale dans la ligne de mode dans divers modes de recherche.

capture d'écran

Kaushal Modi
la source
Merci! J'ai ajouté MELPA et installé anzu et je l'ai allumé, et cela semble fonctionner. J'attendrai de voir si quelqu'un d'autre a une solution qui ne dépend d'aucun package (au moins, les packages qui ne sont pas dans ELPA).
ShreevatsaR
13

Voici quelques possibilités qui ne sont pas très lisses, qui ont l'avantage de travailler avec un stock Emacs.

Si vous appuyez sur M-s o( isearch-occur) pendant une recherche incrémentielle, un tampon Occur apparaît avec l'expression de recherche actuelle. En haut du *Occur*tampon se trouve le nombre de lignes correspondantes.

La commande how-manyaffiche le nombre d'occurrences d'une expression rationnelle (y compris les occurrences répétées). Malheureusement, il n'est pas intégré à la recherche incrémentielle. Voici une intégration isearch de preuve de concept: appuyez M-s #pendant isearch pour afficher le nombre de correspondances.

(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- arrête d'être méchant'
la source
C'est ... ouais. Ce n'est pas exactement ce que je veux, mais il est important de savoir ce qu'il y a de mieux avec Emacs d'origine, merci.
ShreevatsaR
Cela semble montrer uniquement le nombre de lignes correspondantes, pas le nombre de correspondances.
xuhdev
0

Je voudrais suggérer Swiper !

Swiper est une alternative à isearch qui utilise le lierre pour afficher un aperçu de toutes les correspondances.

entrez la description de l'image ici

serghei
la source