Helm: buscar dentro de la función de búfer?

11

Una pregunta bastante básica de Helm. ¿Cuál es la ventana / comando / función de Helm que nos permite buscar texto (preferiblemente usando regexp) dentro de cualquier tipo de búfer (es decir, incluyendo solo lectura como w3m)?

En otras palabras, estoy buscando el equivalente de Helm de los comandos nativos de Emacs para isearch-forward( C-s) / isearch-backward( C-r).

Para ilustrar: después de invocar uno de los isearchcomandos nativos ( C-so C-r), podemos salir del modo de búsqueda de una de dos maneras:

  1. podemos salir y volver al punto original (vía C-g), o

  2. podemos salir y continuar explorando el búfer desde el punto actual, es decir, desde el texto coincidente actualmente (a través de, RETentre otros).

Estoy buscando la segunda de estas dos opciones.


Esto es lo que he probado hasta ahora:

  • helm-regexp: esto es lo más parecido a lo que estoy buscando, pero solo realiza el equivalente de C-s/ C-r+ C-g(es decir, nos lleva de vuelta al punto original; no hay opción para finalizar la búsqueda y continuar explorando el búfer desde el que coincide actualmente punto).

  • helm-do-grep: parece que esto es solo para buscar texto dentro de archivos (es decir, no funciona en w3m)

  • helm-buffer-run-grep/ -zgrep: ejecutar este comando / función da como resultado un mensaje de error en el mini-búfer:Running helm command outside of context

  • cuando helm-modeestá habilitado, invocando C-so C-rpresenta la isearchfunción nativa de Emacs (no es reemplazada por la interfaz de Helm). (¿tal vez haya una configuración que podamos cambiar para que Helm pueda hacerse cargo de este comando? es decir, similar a cómo Helm se hace cargo del comando nativo para write-file( C-x C-w) que se puede usar para cambiar el nombre de un archivo en un búfer abierto. solo lluvia de ideas).

repartidor de hielo
fuente
1
Lo quieres helm-occurcon follow-modehabilitado.
nispio

Respuestas:

16

Puede usar helm-ocurren como una herramienta que viene con el módulo básico helm para esto. Pero para mí, una de las mejores herramientas basadas en timón para la búsqueda de búfer es el timón de Shingo Fukuyama . Puede obtenerlo de github y a través de MELPA. Tiene la funcionalidad requerida de poder soltar su punto en la posición del partido (que puede ser una expresión regular). Pero también puede usar Cg para que el cursor regrese a donde comenzó.

En la página de github de helm-swoop, encontrará un montón de otras funciones útiles que ofrece este paquete (incluidas las búsquedas de búfer múltiples de helm-multi-swoop y la capacidad de editar las líneas de los resultados, de modo que los cambios sean aplicado al búfer subyacente).

dfeich
fuente
Estoy de acuerdo. helm-swoopes en realidad una versión mejorada helm-occur.
Tu Do
Entonces, obviamente llego un poco tarde a este frente. Lo intenté helm-swoop... ¡y nunca volveré! Gracias
iceman
Buen señor, helm-swoop es algo que no es de este mundo.
Leo Ufimtsev
5

Puede usar helm-occurpara ver todas las líneas que contienen coincidencias para su patrón de búsqueda. Puede usar C-ny C-ppara navegar por la lista, y luego presionar RETpara cerrar el búfer Helm y saltar el cursor a la línea correspondiente.

Me gusta habilitar helm-follow-modecuando uso helm-occurpara que la ventana de origen siempre muestre el contexto de la coincidencia seleccionada actualmente. Puede habilitar el modo de seguimiento automáticamente de la siguiente manera:

(require 'helm-config)

(defvar my-helm-follow-sources ()
  "List of sources for which helm-follow-mode should be enabled")

;; Use helm-follow-mode for the following sources:
(add-to-list 'my-helm-follow-sources 'helm-source-occur)

(defun my-helm-set-follow ()
  "Enable helm-follow-mode for the sources specified in the list
variable `my-helm-follow-sources'. This function is meant to
be run during `helm-initialize' and should be added to the hook
`helm-before-initialize-hook'."
  (mapc (lambda (source)
          (when (memq source my-helm-follow-sources)
            (helm-attrset 'follow 1 (symbol-value source))))
        helm-sources))

;; Add hook to enable helm-follow mode for specified helm 
(add-hook 'helm-before-initialize-hook 'my-helm-set-follow)
nispio
fuente