Замена запроса Emacs M-x переносит документ?

Я нашел ответ. Немного поиска с помощью Google подняло эту страницу:

http://ant.apache.org/manual/running.html#background

Похож на муравья, сразу пытается читать из стандартного входа, который заставляет фоновый процесс приостанавливать

7
11.10.2012, 02:09
2 ответа

query-replace очень важная функция, таким образом, я отказываюсь изменить ее глобально. Что я сделал, вместо этого должен скопировать это в новую функцию, my-query-replace, который первоначально имеет то же поведение. Затем я советую этой функции повторять поиск замены запроса в начале буфера, после того как это достигает конца. Это могло бы быть чрезмерно осторожно - Вы могли изменить совет относиться query-replace вместо my-query-replace, и включите это поведение глобально.

;; copy the original query-replace-function 
(fset 'my-query-replace 'query-replace)

;; advise the new version to repeat the search after it 
;; finishes at the bottom of the buffer the first time:    
(defadvice my-query-replace 
  (around replace-wrap 
          (FROM-STRING TO-STRING &optional DELIMITED START END))
  "Execute a query-replace, wrapping to the top of the buffer 
   after you reach the bottom"
  (save-excursion
    (let ((start (point)))
      ad-do-it
      (beginning-of-buffer)
      (ad-set-args 4 (list (point-min) start))
      ad-do-it)))

;; Turn on the advice    
(ad-activate 'my-query-replace)

После того как Вы оценили этот код, можно назвать перенесенный поиск с M-x my-query-replace, или свяжите его с чем-то удобным для Вас:

(global-set-key "\C-cq" 'my-query-replace)
2
27.01.2020, 20:19

Я использовал ниже для работы с 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 (use-region-p)
                           (region-beginning)
                         (point-min))))
               (unless (nth 4 args)
                 (setf (nth 4 args)
                       (if (use-region-p)
                           (region-end)
                         (point-max))))
               (apply oldfun args)))
(global-set-key "\C-cr" 'my-query-replace-all)

Относительно случая замены региона и переданных аргументов START и END.

1
27.01.2020, 20:19

Теги

Похожие вопросы