search emacs text text-editor

search - Búsqueda de texto marcado(seleccionado) en Emacs



text-editor (7)

Yo uso emacs para ver y editar código y otros archivos de texto. Quería saber si hay una forma de buscar hacia adelante o hacia atrás el texto que está marcado en el búfer actual. Similar a lo que puedo hacer en el bloc de notas o el tablero de palabras. Como en ¿puedo marcar un texto en el búfer y hacer una Cs o Cr y poder buscar con el texto marcado sin escribir realmente el texto de búsqueda completo?

Gracias,

Rohit


@Alex lo clava.

Otra opción que uso con frecuencia es Cs Cw para buscar la palabra después de la marca actual. Al presionar Cw repetidamente aumenta la búsqueda con palabras adicionales (por ejemplo, Cs Cw Cw Cw busca las 3 palabras después de la marca actual).

De forma similar, Cs Ms Ce busca el resto de la línea después de la marca actual y Cs CMy busca el carácter después de la marca. Ambos son repetibles de la misma manera (el primero repitiendo un tanto torpemente a la Ms Ce después de Cs ).


Estoy usando lo siguiente que no tiene el problema de tener que escribir más de una C sucesiva para encontrar ocurrencias 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 tramo. 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)


Hay una gran función para esto: isearch-forward-symbol-at-point . Resalta todas las ocurrencias de la palabra donde se ubica su punto, sin necesidad de colocar el punto al comienzo de la palabra. Luego puede pasar a siguiente o anterior con Cs o Cr.

Tenga en cuenta que es una coincidencia exacta: si lo usa en hi no coincidirá con el chill por ejemplo.

Mapeé si en command-f (mac OSX): (global-set-key (kbd "sf") ''isearch-forward-symbol-at-point) en el archivo init.


La secuencia de teclas más corta para hacer esto es M - w C - s M - y .



Otras respuestas describen cómo buscar texto copiado, o cómo buscar la palabra en el punto. Pero ninguno de ellos describe cómo "buscar con el texto marcado".

Agregar el siguiente enlace 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: esto se combina muy bien con expand-region .


Sí. MW (para obtener una copia del texto seleccionado) Cs <RET> Cy <RET> . Luego repita Cs según sea necesario. Del mismo modo para Cr .