Búsqueda de texto marcado (seleccionado) en Emacs
-
03-07-2019 - |
Pregunta
Utilizo emacs para ver y editar código y otros archivos de texto. Quería saber si hay una manera de buscar hacia adelante o hacia atrás para el texto que está marcado en el búfer actual. Similar a lo que puedo hacer en el bloc de notas o el wordpad. Como en, ¿puedo marcar algo de texto en el búfer y hacer un C-s o C-r y poder buscar con el texto marcado sin escribir realmente el texto de búsqueda completo?
Gracias,
Rohit
Solución
Sí M-W
(para obtener una copia del texto seleccionado) C-s <RET> C-y <RET>
. Luego repita C-s
según sea necesario. De manera similar para C-r
.
Otros consejos
@Alex lo clava.
Otra opción que uso con bastante frecuencia es C-s C-w
para buscar la palabra después de la marca actual. Al presionar C-w
repetidamente aumenta la búsqueda con palabras adicionales (por ejemplo, C-s C-w C-w C-w
busca las 3 palabras después de la marca actual).
Del mismo modo, C-s M-s C-e
busca el resto de la línea después de la marca actual y C-s C-M-y
busca el carácter después de la marca. Ambos son repetibles de la misma manera (el primero repitiendo algo incómodo M-s C-e
después de C-s
).
Estoy usando lo siguiente que no tiene el problema de tener que escribir más de una C-s sucesivas para encontrar eventos posteriores:
(defun search-selection (beg end)
"search for selected text"
(interactive "r")
(kill-ring-save beg end)
(isearch-mode t nil nil nil)
(isearch-yank-pop)
)
(define-key global-map (kbd "<C-f3>") 'search-selection)
La desventaja del código anterior es que el texto seleccionado se copia al estiramiento. El siguiente código no tiene este problema:
(defun search-selection (beg end)
"search for selected text"
(interactive "r")
(let (
(selection (buffer-substring-no-properties beg end))
)
(deactivate-mark)
(isearch-mode t nil nil nil)
(isearch-yank-string selection)
)
)
(define-key global-map (kbd "<C-f3>") 'search-selection)
Otras respuestas describen cómo buscar texto copiado o cómo buscar la palabra en el punto. Pero ninguno de ellos describe realmente cómo & Quot; buscar con el texto marcado. & Quot;
Agregar el siguiente gancho hará que el texto seleccionado actualmente sea el texto utilizado para una búsqueda:
(defun jrh-isearch-with-region ()
"Use region as the isearch text."
(when mark-active
(let ((region (funcall region-extract-function nil)))
(deactivate-mark)
(isearch-push-state)
(isearch-yank-string region))))
(add-hook 'isearch-mode-hook #'jrh-isearch-with-region)
Sugerencia: se combina muy bien con expand-region .
La secuencia de teclas más corta para hacer esto es M - w C - s M - y .
Hay una gran función para esto: isearch-forward-symbol-at-point
. Destaca todas las apariciones de la palabra donde se encuentra su punto, sin necesidad de colocar el punto al comienzo de la palabra. Luego puede pasar al siguiente o al anterior con C-s o C-r.
Tenga en cuenta que es una coincidencia exacta: si la usa en hi
no coincidirá con chill
por ejemplo.
Mapeé si a command-f
(mac OSX): (global-set-key (kbd "s-f") 'isearch-forward-symbol-at-point)
en el archivo de inicio.
Las respuestas anteriores (incluida la aceptada) son demasiado engorrosas en mi humilde opinión. Encontré la siguiente información y me gusta mucho mejor:
& # 8220; Ctrl + s Ctrl + w & # 8221 ;. Esto buscará la palabra actual, pero debes moverte su cursor al principio de la palabra primero.
http: // xah- forum.blogspot.com/2009/08/search-word-under-cursor-in-emacs.html
Puede encontrar ayuda de C-s haciendo C-h k C-s, y dice:
Escriba DEL para cancelar el último elemento de entrada desde el final de la cadena de búsqueda. Escriba RET para salir, dejando el punto en la ubicación encontrada. Escriba LFD (C-j) para que coincida con el final desconectado. Escriba C-s para buscar nuevamente hacia adelante, C-r para buscar nuevamente hacia atrás. Escriba C-w para arrastrar la siguiente palabra o carácter en el búfer en el final de la cadena de búsqueda y búsquela. Escriba C-M-w para eliminar carácter del final de la cadena de búsqueda. Escriba C-M-y para extraer char de almacenar en búfer al final de la cadena de búsqueda y buscarlo. Escriba M-s C-e para tire del resto de la línea al final de la cadena de búsqueda y búsquela. Tipo C-y para tirar de la última cadena de texto eliminado. Escriba M-y para reemplazar la cadena simplemente se introdujo en el indicador de búsqueda con una cadena eliminada antes. Tipo C-q para citar el carácter de control para buscarlo. Escriba C-x 8 RET para agregar un carácter para buscar por nombre Unicode, con finalización. C-g mientras búsqueda o cuando la búsqueda ha fallado cancela la entrada de nuevo a lo que ha ha sido encontrado con éxito C-g cuando la búsqueda es exitosa aborta y mueve el punto al punto de partida.
Si intenta salir con la cadena de búsqueda aún vacía, invoca búsqueda no incremental.
Escriba M-c para alternar entre mayúsculas y minúsculas de búsqueda. Escriba M-s i para alternar buscar en texto invisible. Escriba M-r para alternar el modo de expresión regular. Escriba M-s w para alternar el modo de palabra. Escriba M-s _ para alternar el modo de símbolo. Tipo M-s 'para alternar el plegado de caracteres.
Escriba M-s SPC para alternar la coincidencia de espacios en blanco. En búsquedas incrementales, un espacio o espacios normalmente coincide con cualquier espacio en blanco definido por el variable & # 8216; search-whitespace-regexp & # 8217 ;; ver también las variables & # 8216; isearch-lax-whitespace & # 8217; y & # 8216; isearch-regexp-lax-whitespace & # 8217 ;.
Escriba M-s e para editar la cadena de búsqueda en el minibúfer.
También se admite un anillo de búsqueda de las 16 cadenas de búsqueda anteriores. Escriba M-n para buscar el siguiente elemento en el anillo de búsqueda. Escriba M-p para busque el elemento anterior en el anillo de búsqueda. Escriba C-M-i para complete la cadena de búsqueda con el anillo de búsqueda.
Escriba M-% para ejecutar & # 8216; query-replace & # 8217; con una cuerda para reemplazar desde el último cadena de búsqueda. Escriba C-M-% para ejecutar & # 8216; query-replace-regexp & # 8217; con el último cadena de búsqueda. Escriba M-s o para ejecutar & # 8216; se produce & # 8217; que muestra la última búsqueda cuerda. Escriba M-s h r para ejecutar & # 8216; highlight-regexp & # 8217; eso destaca el última cadena de búsqueda.
Escriba C-h b para mostrar todas las asociaciones de teclas de Isearch. Escriba C-h k para mostrar documentación de la clave Isearch. Escriba C-h m para mostrar la documentación de Isearch mode.