Як шукати / замінювати рядок для всього буфера в Emacs, не повертаючись до початку?


9

Справді незручно спочатку повернутися до верхньої частини буфера, а потім виконати пошук / запит. Щодо пошуку, це відносно просто, що ви можете просто натиснути ще C-sодин раз, щоб обернутись, але для запиту / заміни це нудно.

Будь-який простий хак зробити це, не повертаючись до верхньої частини буфера для обох операцій?

Відповіді:


6

Так, схоже, що ти не можеш (взяті звідси , акцент мій):

Щоб замінити кожен екземпляр 'foo' після точки на 'bar', використовуйте команду Mx substitu-string з двома аргументами fooта bar. Заміна відбувається лише після точки, тому якщо ви хочете охопити весь буфер, спочатку потрібно перейти до початку .

Особисто я розділяю буфер на два ( C-x 2), переходжу до вершини ( C-Home), а потім запускаю команду заміну, перемикаюсь назад на свою первісну панель ( C-x o), а потім вбиваю другу ( C-x 0). Не знаю, чи є хитрість зробити це простіше.


4
(defun my-replace-string ()
  (interactive)
  (save-excursion
    (beginning-of-buffer)
    (call-interactively 'replace-string)))

Працює чудово, але викручує заміну запитів у регіоні / виділенні (завжди це стосується всього буфера).
Олексій


0

Я використовую нижче для роботи з 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)

Що стосується випадку заміни регіону, а також будь-які аргументи START і END передані.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.