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.