Jak wyszukiwać / zamieniać ciąg znaków dla całego bufora w Emacsie bez powrotu do początku?

9

Naprawdę niewygodne jest najpierw wrócić na górę bufora, a następnie wykonać wyszukiwanie / zapytanie. Cóż, w przypadku wyszukiwania stosunkowo proste jest naciśnięcie C-sjeszcze raz, aby się obejść, ale w przypadku zapytania / zamiany jest to uciążliwe.

Jakiś prosty hack, aby to zrobić bez powrotu do góry bufora dla obu operacji?

schronienie
źródło

Odpowiedzi:

6

Wygląda na to, że nie możesz (wzięte stąd , moje podkreślenie):

Aby zastąpić każde wystąpienie „foo” po punkcie „bar”, użyj polecenia Mx replace-string z dwoma argumentami fooi bar. Wymiana następuje tylko po punkcie, więc jeśli chcesz objąć cały bufor, musisz najpierw przejść do początku .

Osobiście dzielę bufor na dwie części ( C-x 2), przechodzę do góry ( C-Home), a następnie uruchamiam polecenie replace, przełączam z powrotem do mojego oryginalnego panelu ( C-x o), a następnie zabijam drugą ( C-x 0). Nie wiem, czy jest jakiś sposób, aby to uprościć.

terdon
źródło
4
(defun my-replace-string ()
  (interactive)
  (save-excursion
    (beginning-of-buffer)
    (call-interactively 'replace-string)))
Lri
źródło
Działa ładnie, ale psuje zapytanie-zamień na region / wybór (zawsze działa na cały bufor).
Alex
0

Używam poniżej do pracy z Emacsem 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)

Jeśli chodzi o przypadek zastąpienia regionu, wszystkie argumenty START i END zostały przekazane.

James Yang
źródło