La búsqueda y reemplazo, por M-%y !, se realiza desde la posición actual hasta el final del búfer. ¿Cómo puedo hacerlo para todo el búfer? Gracias.
:%s/foo/bar
La búsqueda y reemplazo, por M-%y !, se realiza desde la posición actual hasta el final del búfer. ¿Cómo puedo hacerlo para todo el búfer? Gracias.
:%s/foo/bar
Respuestas:
No creo que eso sea compatible mientras sigo manteniendo su posición inicial. (No veo una forma de ajustarse al principio del búfer cuando la búsqueda llega al final).
Su mejor opción es usar M-<para ir al inicio del búfer, luego query-replace
, cuando haya terminado, presione C-uC-spaceC-uC-spacepara volver al punto de partida.
transient-mark-mode
está activado. De C-SPC C-SPC
lo contrario , se habilitará temporalmentetransient-mark-mode
Puede agregar el siguiente comando a su archivo de inicialización de emacs y vincularlo a la combinación de teclas que elija.
(defun replace-regexp-entire-buffer (pattern replacement)
"Perform regular-expression replacement throughout buffer."
(interactive
(let ((args (query-replace-read-args "Replace" t)))
(setcdr (cdr args) nil) ; remove third value returned from query---args
args))
(save-excursion
(goto-char (point-min))
(while (re-search-forward pattern nil t)
(replace-match replacement))))
Puedes seguir los siguientes pasos:
C-x h
- Seleccione todo el búfer o M-<
- Vaya a la parte superior del búferM-%
- Iniciar query-replace
!
- La fuerza reemplaza todoC-u C-SPC C-u C-SPC
- Vuelve a tu posición inicialPuede agregar esto a su init.el
archivo para actualizar el comportamiento de M-%
a para reemplazar la palabra en todo el búfer de forma predeterminada:
(defun my/query-replace (from-string to-string &optional delimited start end)
"Replace some occurrences of FROM-STRING with TO-STRING. As each match is
found, the user must type a character saying what to do with it. This is a
modified version of the standard `query-replace' function in `replace.el',
This modified version defaults to operating on the entire buffer instead of
working only from POINT to the end of the buffer. For more information, see
the documentation of `query-replace'"
(interactive
(let ((common
(query-replace-read-args
(concat "Query replace"
(if current-prefix-arg " word" "")
(if (and transient-mark-mode mark-active) " in region" ""))
nil)))
(list (nth 0 common) (nth 1 common) (nth 2 common)
(if (and transient-mark-mode mark-active)
(region-beginning)
(buffer-end -1))
(if (and transient-mark-mode mark-active)
(region-end)
(buffer-end 1)))))
(perform-replace from-string to-string t nil delimited nil nil start end))
;; Replace the default key mapping
(define-key esc-map "%" 'my/query-replace)
Y para obtener el mismo comportamiento de query-replace-regexp
:
(defun my/query-replace-regexp (regexp to-string &optional delimited start end)
"Replace some things after point matching REGEXP with TO-STRING. As each
match is found, the user must type a character saying what to do with
it. This is a modified version of the standard `query-replace-regexp'
function in `replace.el', This modified version defaults to operating on the
entire buffer instead of working only from POINT to the end of the
buffer. For more information, see the documentation of `query-replace-regexp'"
(interactive
(let ((common
(query-replace-read-args
(concat "Query replace"
(if current-prefix-arg " word" "")
" regexp"
(if (and transient-mark-mode mark-active) " in region" ""))
t)))
(list (nth 0 common) (nth 1 common) (nth 2 common)
(if (and transient-mark-mode mark-active)
(region-beginning)
(buffer-end -1))
(if (and transient-mark-mode mark-active)
(region-end)
(buffer-end 1)))))
(perform-replace regexp to-string t t delimited nil nil start end))
;; Replace the default key mapping
(define-key esc-map [?\C-%] 'my/query-replace-regexp)
Si usa Icicles , puede buscar y reemplazar todo el búfer (o múltiples búferes o archivos u objetivos de marcadores).
Y a diferencia de query-replace
(por ejemplo C-x h M-%
):
Puede navegar por los partidos en cualquier orden .
El reemplazo es bajo demanda: no necesita visitar cada partido y responder si debe reemplazarlo o no.
Esta es la solución que estoy usando actualmente, comienza desde el comienzo del búfer y volverá al punto anterior después de reemplazarlo.
(defun query-replace-from-top ()
(interactive)
(let ((orig-point (point)))
(save-excursion
(goto-char (point-min))
(call-interactively 'query-replace))
(message "Back to old point.")
(goto-char orig-point)))
(bind-key* "M-%" 'query-replace-from-top)