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

¿Fue útil?

Solución

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top