¿Cómo buscar / reemplazar cadenas para todo el búfer en Emacs sin volver al principio?

9

Es realmente inconveniente volver primero a la parte superior del búfer y luego hacer la búsqueda / consulta. Bueno, para la búsqueda, es relativamente simple que puede presionar C-suna vez más para ajustar, pero para la consulta / reemplazo, es tedioso.

¿Algún truco simple para hacer eso sin volver a la parte superior del búfer para ambas operaciones?

refugio
fuente

Respuestas:

6

Huh, parece que no puedes (tomado de aquí , énfasis mío):

Para reemplazar cada instancia de 'foo' después del punto con 'bar', use el comando Mx replace-string con los dos argumentos fooy bar. El reemplazo ocurre solo después del punto, por lo que si desea cubrir todo el búfer, primero debe ir al principio .

Personalmente, dividí el búfer en dos ( C-x 2), voy a la parte superior ( C-Home) y luego ejecuto el comando de reemplazo, vuelvo a mi panel original ( C-x o) y luego elimino el segundo ( C-x 0). No sé si hay un truco para hacerlo más simple.

terdon
fuente
4
(defun my-replace-string ()
  (interactive)
  (save-excursion
    (beginning-of-buffer)
    (call-interactively 'replace-string)))
Lri
fuente
Funciona bien, pero arruina el reemplazo de consultas en región / selección (siempre lo hace en todo el búfer).
Alex
0

Lo estoy usando a continuación para trabajar con Emacs 24+:

;; query replace all from buffer start
(fset 'my-query-replace-all 'query-replace)
(advice-add 'my-query-replace-all
            :around
            #'(lambda(oldfun &rest args)
               "Query replace the whole buffer."
               ;; set start pos
               (unless (nth 3 args)
                 (setf (nth 3 args)
                       (if (region-active-p)
                           (region-beginning)
                         (point-min))))
               (unless (nth 4 args)
                 (setf (nth 4 args)
                       (if (region-active-p)
                           (region-end)
                         (point-max))))
               (apply oldfun args)))
(global-set-key "\C-cr" 'my-query-replace-all)

Respecto al caso de reemplazo de la región, y cualquier argumento START y END aprobado

James Yang
fuente