Bagaimana cara mencari / mengganti string untuk seluruh buffer di Emacs tanpa kembali ke awal?

9

Sangat tidak nyaman untuk kembali ke buffer terlebih dahulu dan kemudian melakukan pencarian / permintaan. Nah, untuk pencarian, relatif sederhana bahwa Anda bisa menekan C-ssekali lagi untuk membungkus, tetapi untuk permintaan / ganti, itu membosankan.

Adakah hack sederhana untuk melakukan itu tanpa kembali ke buffer top untuk kedua operasi?

tempat perlindungan
sumber

Jawaban:

6

Huh, sepertinya Anda tidak bisa (diambil dari sini , beri penekanan pada saya):

Untuk mengganti setiap instance 'foo' setelah titik dengan 'bar', gunakan perintah Mx replace-string dengan dua argumen foodan bar. Penggantian terjadi hanya setelah titik, jadi jika Anda ingin menutupi seluruh buffer, Anda harus pergi ke awal terlebih dahulu .

Secara pribadi, saya membagi buffer menjadi dua ( C-x 2), pergi ke atas ( C-Home) dan kemudian jalankan perintah ganti, kembali ke panel asli saya ( C-x o) dan kemudian bunuh yang kedua ( C-x 0). Tidak tahu apakah ada trik untuk membuatnya lebih sederhana.

terdon
sumber
4
(defun my-replace-string ()
  (interactive)
  (save-excursion
    (beginning-of-buffer)
    (call-interactively 'replace-string)))
Lri
sumber
Berfungsi dengan baik, tetapi mengacaukan penggantian-permintaan pada wilayah / pemilihan (selalu berlaku pada seluruh buffer).
Alex
1

Saya menggunakan iedit untuk ini. Sangat berguna.

Tom
sumber
0

Saya telah menggunakan di bawah ini untuk bekerja dengan 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)

Mengenai wilayah ganti kasing, dan setiap argumen MULAI dan AKHIR berlalu.

James Yang
sumber