Obtener el número de ocurrencias, durante la búsqueda incremental (Cs / isearch-forward)

17

Inspirado por los navegadores modernos, me encantaría poder ver cuántas ocurrencias hay de alguna cadena, cuando la busco, como el "10 de 37" en la esquina superior derecha de la captura de pantalla a continuación.

Chrome 10 de 37

¿Hay alguna manera de obtener esto en Emacs? Presumiblemente, para no ser lento, debería ejecutarse solo después de un tiempo de inactividad.

ShreevatsaR
fuente
Este es un duplicado de estas preguntas etiquetadas [emacs] en StackOverflow: stackoverflow.com/q/14764130/729907 , stackoverflow.com/q/22479140/729907 . Aparentemente no se puede cerrar como un duplicado, así que supongo que eso significa que la gente puede copiar los millones de otras preguntas etiquetadas con SO [emacs] ... Bonjour les degats.
Dibujó el
@Drew: Gracias por esos consejos. Obviamente, no es razonable considerar las preguntas como duplicados en diferentes sitios web, como tampoco lo consideraría una pregunta aquí como "duplicado" de algo preguntado en otro lugar (por ejemplo, en gnu.emacs.help). Sí, la esperanza de este sitio es que si se reproducen buenas preguntas de SO aquí, debería mejorar la calidad de este sitio. No sabía que la pregunta se había formulado en SO, pero definitivamente es una buena idea para alguien con el tiempo para comenzar a hacer (y responder) las mejores preguntas aquí. Tal vez debería haber una forma de migrar preguntas automáticamente.
ShreevatsaR
¿Por qué? ¿Por qué es bueno reproducir las "buenas preguntas de SO" aquí? ¿Cuál es el objetivo? Esta versión beta prueba si tiene sentido tener un sitio Emacs separado, en lugar de utilizar la etiqueta [emacs] en SO, etc. Esto no tiene ningún sentido para mí. ¿Y por qué querríamos alentar tal comportamiento? ¿A quién ayuda (además de la copiadora)? Si quisiéramos migrar cosas (lo que hacemos no , durante Beta), entonces al menos la pregunta y los encuestados originales se mantienen en el bucle.
Dibujó el
@Drew: El objetivo es tener un buen lugar para hacer y responder preguntas sobre Emacs. Se alienta a todos los sitios de SE a "sembrar" el sitio durante la versión beta (privada) con buenas preguntas y respuestas, de modo que los visitantes posteriores del sitio sepan qué tipo de contenido es apropiado. De todos modos, solo vine aquí porque escuché de este sitio y pensé en hacer las preguntas que me estaban molestando en este momento; esos comentarios sobre la migración de preguntas fueron estimulados por sus comentarios en el primer comentario anterior.
ShreevatsaR
OKAY. Llévelo a Meta si tiene algo más que decir.
Dibujó el

Respuestas:

15

El anzupaquete hace eso.

anzu.el proporciona un modo menor que muestra la información de coincidencia actual y total en la línea de modo en varios modos de búsqueda.

captura de pantalla

Kaushal Modi
fuente
¡Gracias! Agregué MELPA e instalé anzu y lo encendí, y parece estar funcionando. Esperaré para ver si alguien más tiene una solución que no dependa de ningún paquete (al menos, paquetes que no están en ELPA).
ShreevatsaR
13

Aquí hay algunas posibilidades que no son muy ingeniosas, que tienen la ventaja de trabajar con un stock Emacs.

Si pulsa M-s o( isearch-occur) durante una búsqueda incremental, un Ocurren búfer aparece con la expresión de búsqueda actual. En la parte superior del *Occur*búfer está el número de líneas coincidentes.

El comando how-manymuestra el número de apariciones de una expresión regular (incluidas las repeticiones). Lamentablemente no está integrado con la búsqueda incremental. Aquí hay una integración de isearch de prueba de concepto: presione M-s #durante isearch para mostrar el número de coincidencias.

(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- deja de ser malvado'
fuente
Esto ... si. No es exactamente lo que quiero, pero es valioso saber lo mejor que es posible con el stock Emacs, gracias.
ShreevatsaR
Esto parece solo mostrar el número de líneas coincidentes, no el número de coincidencias.
xuhdev
0

¡Me gustaría sugerir Swiper !

Swiper es una alternativa a isearch que usa hiedra para mostrar una descripción general de todas las coincidencias.

ingrese la descripción de la imagen aquí

serghei
fuente