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?

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.


4
(defun my-replace-string ()
  (interactive)
  (save-excursion
    (beginning-of-buffer)
    (call-interactively 'replace-string)))

Berfungsi dengan baik, tetapi mengacaukan penggantian-permintaan pada wilayah / pemilihan (selalu berlaku pada seluruh buffer).
Alex


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.