Timone: ricerca all'interno della funzione buffer?


11

Una domanda Helm piuttosto semplice. Qual è la finestra / comando / funzionalità di Helm che ci consente di cercare testo (preferibilmente usando regexp) all'interno di qualsiasi tipo di buffer (ovvero, incluso la sola lettura come w3m)?

In altre parole, sto cercando l'equivalente di Helm dei comandi nativi di Emacs per isearch-forward( C-s) / isearch-backward( C-r).

Per illustrare: dopo aver richiamato uno dei isearchcomandi nativi ( C-so C-r), possiamo uscire dalla modalità di ricerca in due modi:

  1. possiamo uscire e tornare al punto originale (via C-g), oppure

  2. possiamo uscire e continuare a navigare nel buffer dal punto corrente, cioè dal testo attualmente abbinato (via RETtra gli altri).

Sto cercando la seconda di queste due opzioni.


Ecco cosa ho provato finora:

  • helm-regexp: questa è la cosa più vicina a ciò che sto cercando, ma esegue solo l'equivalente di C-s/ C-r+ C-g(ovvero, ci riporta al punto originale; nessuna opzione per terminare la ricerca e continuare a navigare nel buffer da quello attualmente abbinato punto).

  • helm-do-grep: sembra che questo sia solo per la ricerca di testo all'interno dei file (ovvero, non funziona su w3m)

  • helm-buffer-run-grep/ -zgrep: l'esecuzione di questo comando / funzione genera un messaggio di errore nel mini-buffer:Running helm command outside of context

  • quando helm-modeè abilitato, invoca C-so C-rvisualizza la isearchfunzione nativa di Emacs (non è sostituita dall'interfaccia di Helm). (forse c'è un'impostazione che possiamo modificare in modo che Helm possa assumere questo comando? Vale a dire, simile a come Helm assume il comando nativo per write-file( C-x C-w) che può essere usato per rinominare un file in un buffer aperto. Solo brainstorming.)


1
Vuoi helm-occurcon follow-modeabilitato.
nispio,

Risposte:


16

A tale scopo, è possibile utilizzare helm -rev come strumento fornito con il modulo helm di base. Ma per me, uno dei migliori strumenti basati sul timone per la ricerca di buffer è il timone di Shingo Fukuyama . Puoi ottenerlo da Github e tramite MELPA. Ha la funzionalità richiesta per poter rilasciare il punto nella posizione della partita (che può essere una ripetizione). Ma puoi anche usare Cg per riportare il cursore da dove hai iniziato.

Nella pagina di helith-swoop github troverai un sacco di altre utili funzioni offerte da questo pacchetto (tra cui ricerche multi-buffer di helm-multi-swoop e la possibilità di modificare le linee dei risultati, in modo che le modifiche siano applicato al buffer sottostante).


Sono d'accordo. helm-swoopè davvero una versione migliorata di helm-occur.
Tu Do

Quindi, sono un po 'in ritardo su questo fronte. Ci ho provato helm-swoop... e non ci tornerò mai più! Grazie
iceman il

Buon Dio, il timone è qualcosa che non proviene da questo mondo.
Leo Ufimtsev,

5

Puoi usare helm-occurper vedere tutte le linee che contengono corrispondenze per il tuo modello di ricerca. È possibile utilizzare C-ne C-pper navigare nell'elenco, quindi premere RETper chiudere il buffer del timone e saltare il cursore sulla riga corrispondente.

Mi piace abilitare helm-follow-modequando lo uso in helm-occurmodo che la finestra di origine mostri sempre il contesto della corrispondenza attualmente selezionata. È possibile abilitare la modalità follow automaticamente come segue:

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