Selezionando (cioè come regione) la corrispondenza corrente nella ricerca incrementale


9

Quando C-scerco una stringa con , voglio essere in grado di premere un tasto per uscire dalla modalità di ricerca ma mantenere comunque la selezione della corrispondenza. In questo modo posso iniziare subito a digitare e sostituire l'ultima partita.

Ad esempio, supponiamo di avere il seguente documento:

The quick brown fox jumps over the lazy dog.

Se cerco "pigro", emacs selezionerà la parola in questo modo (parentesi quadre sono selezione, pipe è cursore):

The quick brown fox jumps over the [lazy|] dog.

Ora, se premo return, emacs manterrà la posizione del mio cursore, ma deselezionerà "pigro":

The quick brown fox jumps over the lazy| dog.

Invece di questo, voglio un collegamento che uscirà dalla modalità di ricerca ma manterrà la selezione della corrispondenza corrente, come nel secondo stato sopra.


Non è M-x query-replacequello che stai cercando?
Nsukami _

1
@Nsukami_ Non sempre so cosa voglio che sia la mia query o anche con cosa voglio sostituirla prima di cercare. È molto più semplice semplicemente premere C-se digitare ciò che penso di voler cercare, quindi cambiare la query con backspace a zero in sulla cosa che voglio cambiare. Poi gioco con ciò con cui voglio esattamente sostituirlo. M-%è troppo "formale".
Ben

La soluzione mi è utile, come quando cerco una parola per ucciderla e poi la trasporta in un posto diverso. query-replacenon risolve questo.
GergelyPolonkai

Risposte:


7

Ecco un approccio:

(defun isearch-exit-mark-match ()
  "Exit isearch and mark the current match."
  (interactive)
  (isearch-exit)
  (push-mark isearch-other-end)
  (activate-mark))

(define-key isearch-mode-map (kbd "<C-return>") #'isearch-exit-mark-match)

In questo modo viene associato un tasto diverso (C-return) per uscire dall'isearch corrente e lasciare selezionata l'ultima corrispondenza. Funzionerà anche con questo isearch-forward-regexp, il che è utile.


1
Ottengo "La definizione della funzione del simbolo è nulla: bind-key". Da dove viene bind-key?
Ben

1
Siamo spiacenti, bind-keyviene da un'altra libreria. Ho modificato la risposta per utilizzare define-keyinvece la funzione integrata.
Glucas,

4

Library Isearch + ti consente di farlo facilmente e anche di attivarlo / disattivarlo al volo.

  • L'opzione non nulla isearchp-set-region-flagimposta automaticamente la regione (selezione) attorno all'ultimo obiettivo di ricerca quando si esce da isearch.

  • Comando isearchp-toggle-set-regionassociato M-s M-SPCall'opzione di attivazione / disattivazione isearch isearchp-set-region-flag.

  • Il comando set-region-around-search-targetimposta manualmente l'area attorno all'ultima destinazione di ricerca. (Quindi anche se l'opzione non è impostata, quindi non si ottiene la selezione automatica, è possibile farlo manualmente.)


Library Replace + ti consente di fare la stessa cosa per query-replaceecc. Mette la regione intorno (cioè seleziona) l'ultima occorrenza di sostituzione. Utilizza la stessa opzione, isearchp-set-region-flagper controllarlo, e il comando set-region-around-search-targetha lo stesso effetto.

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.