Seleccionar (es decir, como la región) la coincidencia actual en búsqueda incremental

9

Al buscar una cadena con C-s, quiero poder presionar alguna tecla para salir del modo de búsqueda, pero aún así mantener la selección de la coincidencia. De esa manera, puedo comenzar a escribir de inmediato y reemplazar la última coincidencia.

Por ejemplo, digamos que tengo el siguiente documento:

The quick brown fox jumps over the lazy dog.

Si busco "perezoso", emacs seleccionará esa palabra así (los corchetes son la selección, la tubería es el cursor):

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

Ahora, si returnpresiono, emacs mantendrá la posición de mi cursor, pero deseleccionará "perezoso":

The quick brown fox jumps over the lazy| dog.

En lugar de esto, quiero un acceso directo que salga del modo de búsqueda pero mantenga la selección de coincidencia actual, como en el segundo estado anterior.

Ben
fuente
¿No es M-x query-replacelo que estás buscando?
Nsukami _
1
@Nsukami_ No siempre sé qué quiero que sea mi consulta o incluso con qué quiero reemplazarla antes de buscar. Es mucho más fácil presionar C-sy escribir lo que creo que quiero buscar, luego cambiar la consulta con retroceso a cero en lo que quiero cambiar. Luego juego con lo que exactamente quiero reemplazar. M-%es demasiado "formal".
Ben
La solución me resulta útil, como cuando busco una palabra para matarla y luego la tiro a un lugar diferente. query-replaceno resuelve esto
GergelyPolonkai

Respuestas:

7

Aquí hay un enfoque:

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

Esto vincula una tecla diferente (C-return) para salir de la búsqueda actual y también dejar la última coincidencia seleccionada. Esto también funcionará isearch-forward-regexp, lo cual es útil.

glucas
fuente
1
Obtengo "La definición de la función del símbolo es nula: clave de enlace". De donde bind-keyviene
Ben
1
Lo siento, bind-keyviene de otra biblioteca. He cambiado la respuesta para usar la función incorporada en su define-keylugar.
glucas
4

Library Isearch + te permite hacerlo fácilmente e incluso activarlo / desactivarlo sobre la marcha.

  • La opción no nula isearchp-set-region-flagestablece automáticamente la región (selección) alrededor del último objetivo de búsqueda cuando sale de la búsqueda.

  • Comando isearchp-toggle-set-region, vinculado a M-s M-SPCdurante la búsqueda alterna la opción isearchp-set-region-flag.

  • El comando set-region-around-search-targetestablece manualmente la región alrededor del último objetivo de búsqueda. (Por lo tanto, incluso si la opción no está configurada, por lo que no obtiene la selección automática, puede hacerlo manualmente).


Library Reemplazar + le permite hacer lo mismo para query-replaceetc. Coloca la región alrededor (es decir, selecciona) la última ocurrencia de reemplazo. Utiliza la misma opción, isearchp-set-region-flagpara controlar esto, y el comando set-region-around-search-targettiene el mismo efecto.

Dibujó
fuente