Ottenere il numero di occorrenze, durante la ricerca incrementale (Cs / isearch-forward)


17

Ispirato dai browser moderni, mi piacerebbe poter vedere quante occorrenze ci sono di una stringa, quando la cerco - come il "10 di 37" nell'angolo in alto a destra dello screenshot qui sotto.

Chrome 10 di 37

C'è un modo per ottenerlo in Emacs? Presumibilmente, per non essere lento, dovrebbe funzionare solo dopo qualche tempo di inattività.


Questo è un duplicato di queste domande [emacs] con tag su StackOverflow: stackoverflow.com/q/14764130/729907 , stackoverflow.com/q/22479140/729907 . Apparentemente non può essere chiuso come duplicato, quindi immagino che ciò significhi che la gente può copiare i miliardi di altre domande contrassegnate con SO [emacs] ... Bonjour les degats.
— Ha

@Drew: grazie per questi suggerimenti. Ovviamente non è ragionevole considerare le domande come duplicati su diversi siti Web, non più di quanto tu consideri una domanda qui un "duplicato" di qualcosa che è stato fatto da qualche altra parte (ad esempio su gnu.emacs.help). Sì, la speranza per questo sito è che se qui vengono riprodotte buone domande da SO, dovrebbe migliorare la qualità di questo sito. Non sapevo che la domanda fosse stata posta su SO, ma è sicuramente una buona idea per qualcuno con il tempo di iniziare a porre (e rispondere) le migliori domande qui. Forse dovrebbe esserci un modo per migrare automaticamente le domande.
— ShreevatsaR,

Perché? Perché è una buona cosa riprodurre qui le "buone domande da SO"? Qual è lo scopo? Questa beta verifica se ha senso avere un sito Emacs separato, invece di usare tag [emacs] su SO ecc. Se "proviamo" che questo sito è significativo semplicemente copiando domande da altrove, allora cosa abbiamo mostrato? Questo non ha senso per me. E perché dovremmo incoraggiare tale comportamento? Chi aiuta (oltre alla fotocopiatrice)? Se volessimo migrare roba (cosa che non facciamo durante la Beta), almeno l'interrogante e i rispondenti originali sarebbero tenuti al corrente.
— Ha

@Drew: l'obiettivo è quello di avere un buon posto per porre e rispondere a domande su Emacs. Tutti i siti SE sono incoraggiati a "seminare" il sito durante la beta (privata) con buone domande e risposte, in modo che i visitatori successivi del sito sappiano quale tipo di contenuto è appropriato. Ad ogni modo, sono venuto qui solo perché ho sentito parlare di questo sito e ho pensato di porre le domande che al momento mi davano fastidio; quei pensieri sulle domande sulla migrazione sono stati stimolati dalle tue osservazioni nel primo commento sopra.
— ShreevatsaR,

OK. Per favore, portalo su Meta , se hai qualcosa in più da dire.
— Disegnò l'

Risposte:


15

Il anzupacchetto lo fa.

anzu.el fornisce una modalità minore che visualizza le informazioni sulla corrispondenza corrente e sulla corrispondenza totale nella riga della modalità in varie modalità di ricerca.

immagine dello schermo


Grazie! Ho aggiunto MELPA e installato anzu e l'ho acceso, e sembra funzionare. Aspetterò di vedere se qualcun altro ha una soluzione che non dipende da alcun pacchetto (almeno, pacchetti non in ELPA).
— ShreevatsaR,

13

Ecco alcune possibilità che non sono molto fluide, che hanno il vantaggio di lavorare con un Emacs di serie.

Se si preme M-s o( isearch-occur) durante una ricerca incrementale, un si verificano gli tampone si apre con l'espressione di ricerca corrente. Nella parte superiore del *Occur*buffer si trova il numero di righe corrispondenti.

Il comando how-manyvisualizza il numero di occorrenze di una regexp (incluse ricorrenze ripetute). Purtroppo non è integrato con la ricerca incrementale. Ecco un'integrazione isearch di prova: premere M-s #durante isearch per mostrare il numero di corrispondenze.

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

Questo ... sì. Non è esattamente quello che voglio, ma è prezioso sapere il meglio possibile con Emacs di serie, grazie.
— ShreevatsaR,

Questo sembra mostrare solo il numero di linee corrispondenti, non il numero di corrispondenze.
— xuhdev,

0

Vorrei suggerire Swiper !

Swiper è un'alternativa a isearch che utilizza l'edera per mostrare una panoramica di tutte le partite.

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.