Suchen und Ersetzen durch M-%und !erfolgt von der aktuellen Position bis zum Ende des Puffers. Wie kann ich es für den gesamten Puffer tun? Vielen Dank.
:%s/foo/bar
Suchen und Ersetzen durch M-%und !erfolgt von der aktuellen Position bis zum Ende des Puffers. Wie kann ich es für den gesamten Puffer tun? Vielen Dank.
:%s/foo/bar
Antworten:
Ich sehe das nicht unterstützt, während ich deine Ausgangsposition beibehalte. (Ich sehe keine Möglichkeit, an den Anfang des Puffers zu springen, wenn die Suche das Ende erreicht.)
Ihre beste Wette ist M-<es, zum Anfang des Puffers zu springen. query-replace
Wenn Sie fertig sind, drücken Sie C-uC-spaceC-uC-space, um zum Startpunkt zurückzukehren.
transient-mark-mode
ist. Ansonsten C-SPC C-SPC
wird vorübergehend aktivierttransient-mark-mode
Sie können der emacs-Initialisierungsdatei den folgenden Befehl hinzufügen und ihn an einen Tastendruck Ihrer Wahl binden.
(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))))
Sie können die folgenden Schritte ausführen:
C-x h
- Wählen Sie den gesamten Puffer aus oder M-<
- Gehen Sie zum oberen Rand des PuffersM-%
- Initiieren query-replace
!
- Alle erzwingenC-u C-SPC C-u C-SPC
- Fahren Sie zurück in Ihre AusgangspositionSie können dies zu Ihrer init.el
Datei hinzufügen , um das Verhalten von zu aktualisieren M-%
und das Wort standardmäßig im gesamten Puffer zu ersetzen:
(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)
Und um dasselbe Verhalten zu erzielen von 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)
Wenn Sie Eiszapfen verwenden , können Sie den gesamten Puffer (oder mehrere Puffer, Dateien oder Lesezeichen) durchsuchen und ersetzen .
Und im Gegensatz zu query-replace
(zB C-x h M-%
):
Sie können in beliebiger Reihenfolge durch die Übereinstimmungen navigieren .
Ersatz ist auf Anfrage: Sie müssen nicht jedes Spiel besuchen und entscheiden, ob Sie es ersetzen möchten oder nicht.
Dies ist die Lösung, die ich derzeit verwende. Sie beginnt am Anfang des Puffers und kehrt nach dem Ersetzen zum alten Punkt zurück.
(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)