Como procurar / substituir string por todo o buffer no Emacs sem voltar ao começo?

9

É realmente inconveniente voltar primeiro ao topo do buffer e fazer a pesquisa / consulta. Bem, para a pesquisa, é relativamente simples que você possa pressionar C-s mais uma vez, mas para consulta / substituição, é tedioso.

Qualquer hack simples para fazer isso sem voltar ao topo do buffer para ambas as operações?

    
por shelper 03.06.2013 / 17:44

4 respostas

6

Parece que você não pode (tirado de aqui ênfase minha):

To replace every instance of 'foo' after point with 'bar', use the command M-x replace-string with the two arguments foo and bar. Replacement occurs only after point, so if you want to cover the whole buffer you must go to the beginning first.

Pessoalmente, divido o buffer em dois ( C-x 2 ), vou para o topo ( C-Home ) e, em seguida, executo o comando replace, volto ao meu painel original ( C-x o ) e mato o segundo ( %código%). Não sei se existe um truque para tornar isso mais simples.

    
por 03.06.2013 / 17:59
4
(defun my-replace-string ()
  (interactive)
  (save-excursion
    (beginning-of-buffer)
    (call-interactively 'replace-string)))
    
por 04.08.2013 / 10:59
1

Eu uso ied para isso. Muito útil.

    
por 03.06.2013 / 18:04
0

Estou usando abaixo para trabalhar com o 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)

Considere o caso de substituição da região e quaisquer argumentos START e END transmitidos.

    
por 03.12.2016 / 04:17

Tags