Я нашел ответ. Немного поиска с помощью Google подняло эту страницу:
http://ant.apache.org/manual/running.html#background
Похож на муравья, сразу пытается читать из стандартного входа, который заставляет фоновый процесс приостанавливать
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)
Я использовал ниже для работы с 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.