Wie kann ich in Emacs nach Zeichenfolgen für den gesamten Puffer suchen / diese ersetzen, ohne zum Anfang zurückzukehren?

9

Es ist wirklich unpraktisch, zuerst zum Puffer oben zurückzukehren und dann die Suche / Abfrage durchzuführen. Nun, für die Suche ist es relativ einfach, dass Sie nur noch einmal drücken C-skönnen, um herumzuschlagen, aber für das Abfragen / Ersetzen ist es mühsam.

Gibt es einen einfachen Hack, um dies zu tun, ohne für beide Operationen zum Pufferoberteil zurückzukehren?

Shelper
quelle

Antworten:

6

Huh, sieht so aus, als ob du es nicht kannst (von hier genommen , Hervorhebung von mir):

Verwenden Sie den Befehl Mx replace-string mit den beiden Argumenten foound, um jede Instanz von 'foo' nach Punkt durch 'bar' zu ersetzen bar. Das Ersetzen erfolgt erst nach Punkt. Wenn Sie also den gesamten Puffer abdecken möchten, müssen Sie zuerst zum Anfang gehen .

Persönlich teile ich den Puffer in zwei ( C-x 2), gehe nach oben ( C-Home) und führe dann den Ersetzungsbefehl aus, wechsle zurück zu meinem ursprünglichen Bereich ( C-x o) und töte dann den zweiten ( C-x 0). Ich weiß nicht, ob es einen Trick gibt, der das einfacher macht.

Terdon
quelle
4
(defun my-replace-string ()
  (interactive)
  (save-excursion
    (beginning-of-buffer)
    (call-interactively 'replace-string)))
Lri
quelle
Funktioniert gut, vermasselt aber das Ersetzen von Abfragen für Region / Auswahl (immer für den gesamten Puffer).
Alex
1

Ich benutze dafür iedit . Sehr hilfreich.

Tom
quelle
0

Ich benutze unten für die Arbeit mit 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)

Betrachten Sie den Bereich zum Ersetzen der Region, und alle START- und END-Argumente wurden übergeben.

James Yang
quelle