Anzahl der Vorkommen während der inkrementellen Suche abrufen (Cs / isearch-forward)

17

Inspiriert von modernen Browsern, würde ich gerne in der Lage sein zu sehen, wie oft Zeichenfolgen vorkommen, wenn ich danach suche - wie die "10 von 37" in der oberen rechten Ecke des Screenshots unten.

Chrome 10 von 37

Gibt es eine Möglichkeit, dies in Emacs zu erreichen? Um nicht zu langsam zu sein, sollte es vermutlich erst nach einer gewissen Leerlaufzeit ausgeführt werden.

ShreevatsaR
quelle
Dies ist ein Duplikat dieser mit [emacs] gekennzeichneten Fragen in StackOverflow: stackoverflow.com/q/14764130/729907 , stackoverflow.com/q/22479140/729907 . Anscheinend kann es nicht als Duplikat geschlossen werden, was bedeutet, dass die Leute die Millionen anderer SO [emacs] getaggter Fragen kopieren können ... Bonjour les degats.
Drew,
@Drew: Danke für die Hinweise. Offensichtlich ist es nicht sinnvoll, Fragen als Duplikate über verschiedene Websites hinweg zu betrachten, genauso wenig wie Sie eine Frage hier als "Duplikat" von etwas betrachten, das an einer anderen Stelle gestellt wurde (z. B. auf gnu.emacs.help). Ja, die Hoffnung für diese Site ist, dass wenn gute Fragen von SO hier reproduziert werden, dies die Qualität dieser Site verbessern sollte. Ich wusste nicht, dass die Frage auf SO gestellt wurde, aber es ist definitiv eine gute Idee für jemanden, der die Zeit hat, hier die besten Fragen zu stellen (und zu beantworten). Vielleicht sollte es eine Möglichkeit geben, Fragen automatisch zu migrieren.
ShreevatsaR
Warum? Warum ist es gut, die "guten Fragen von SO" hier wiederzugeben? Was ist das Ziel? Diese Beta testet, ob es sinnvoll ist, eine separate Emacs-Site zu haben, anstatt tag [emacs] auf SO usw. zu verwenden. Das ergibt für mich keinen Sinn. Und warum sollten wir ein solches Verhalten fördern wollen? Wem hilft es (außer dem Kopierer)? Wenn wir etwas migrieren wollten (was wir während der Beta nicht tun ), würden zumindest der ursprüngliche Fragesteller und die Befragten auf dem Laufenden bleiben.
Drew
@Drew: Ziel ist es, einen guten Ort zu haben, um Fragen zu Emacs zu stellen und zu beantworten. Alle SE-Sites werden aufgefordert, die Site während der (privaten) Beta-Phase mit guten Fragen und Antworten zu "säen", damit spätere Besucher der Site wissen, welche Art von Inhalt angemessen ist. Wie auch immer, ich bin nur hergekommen, weil ich von dieser Seite gehört habe und mir überlegt habe, die Fragen zu stellen, die mich im Moment beschäftigten. Diese Überlegungen zu migrierenden Fragen wurden durch Ihre Anmerkungen im ersten Kommentar oben beflügelt.
ShreevatsaR
IN ORDNUNG. Bitte bring es zu Meta , wenn du mehr zu sagen hast.
Drew

Antworten:

15

Das anzuPaket macht das.

anzu.el stellt einen Nebenmodus zur Verfügung, der in verschiedenen Suchmodi die aktuellen Übereinstimmungen und die Gesamtzahl der Übereinstimmungen in der Moduszeile anzeigt.

Bildschirmfoto

Kaushal Modi
quelle
Vielen Dank! Ich habe MELPA hinzugefügt und anzu installiert und eingeschaltet, und es scheint zu funktionieren. Ich werde abwarten, ob jemand eine Lösung hat, die nicht von Paketen abhängt (zumindest Pakete, die nicht in ELPA enthalten sind).
ShreevatsaR
13

Hier sind einige Möglichkeiten, die nicht sehr geschickt sind und den Vorteil haben, mit einem Standard-Emacs zu arbeiten.

Wenn Sie während einer inkrementellen Suche M-s o( isearch-occur) drücken , wird ein Occur- Puffer mit dem aktuellen Suchausdruck angezeigt. Am oberen *Occur*Rand des Puffers befindet sich die Anzahl der übereinstimmenden Zeilen.

Der Befehl how-manyzeigt die Anzahl der Ausprägungen eines regulären Ausdrucks an (einschließlich wiederholter Ausprägungen). Leider ist es nicht in die inkrementelle Suche integriert. Hier ist eine Proof-of-Concept-Integration für die Suche: Drücken Sie M-s #während der Suche, um die Anzahl der Übereinstimmungen anzuzeigen.

(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 - hör auf böse zu sein'
quelle
Das ... ja. Es ist nicht genau das, was ich will, aber es ist wertvoll, das Beste zu wissen, was mit Emacs möglich ist, danke.
ShreevatsaR
Hier wird nur die Anzahl der übereinstimmenden Zeilen angezeigt, nicht die Anzahl der Übereinstimmungen.
Xuhdev
0

Ich möchte Swiper vorschlagen !

Swiper ist eine Alternative zu isearch, bei der mit ivy eine Übersicht aller Übereinstimmungen angezeigt wird.

Bildbeschreibung hier eingeben

serghei
quelle