Comment rechercher / remplacer une chaîne pour tout le tampon dans Emacs sans revenir au début?

9

Il est vraiment gênant de retourner d'abord au sommet du tampon, puis de faire la recherche / requête. Eh bien, pour la recherche, il est relativement simple que vous puissiez simplement appuyer C-sune fois de plus pour boucler, mais pour la requête / remplacement, c'est fastidieux.

Un simple hack pour le faire sans retourner au sommet du tampon pour les deux opérations?

abri
la source

Réponses:

6

Huh, on dirait que tu ne peux pas (tiré d' ici , c'est moi qui souligne):

Pour remplacer chaque instance de 'foo' après le point par 'bar', utilisez la commande Mx replace-string avec les deux arguments fooet bar. Le remplacement ne se produit qu'après le point, donc si vous voulez couvrir tout le tampon, vous devez d'abord aller au début .

Personnellement, je divise le tampon en deux ( C-x 2), vais en haut ( C-Home) puis exécute la commande replace, reviens à mon volet d'origine ( C-x o) puis tue le second ( C-x 0). Je ne sais pas s'il y a une astuce pour simplifier les choses.

terdon
la source
4
(defun my-replace-string ()
  (interactive)
  (save-excursion
    (beginning-of-buffer)
    (call-interactively 'replace-string)))
Lri
la source
Fonctionne bien, mais bousille le remplacement de requête sur la région / sélection (toujours sur tout le tampon).
Alex
0

J'ai utilisé ci-dessous pour travailler avec 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)

En ce qui concerne le cas de remplacement de région, et tous les arguments START et END passés.

James Yang
la source