9

Это действительно неудобно сначала вернуться к вершине буфера, а затем выполнить поиск / запрос. Что касается поиска, то относительно просто, что вы можете просто нажать C-s еще раз, чтобы обернуться, но для запроса / замены это утомительно.

Любой простой взлом, чтобы сделать это, не возвращаясь к вершине буфера для обеих операций?

4 ответа4

6

Да, похоже, что вы не можете (взято отсюда, выделение мое):

Чтобы заменить каждый экземпляр 'foo' после точки на 'bar', используйте команду Mx replace-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)))
1

Я использую iedit для этого. Очень полезно.

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 пройдены.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .