วิธีค้นหา / แทนที่สตริงสำหรับบัฟเฟอร์ทั้งหมดใน Emacs โดยไม่กลับไปที่จุดเริ่มต้น


9

มันไม่สะดวกจริงๆที่จะกลับไปที่บัฟเฟอร์ด้านบนก่อนจากนั้นทำการค้นหา / สืบค้น สำหรับการค้นหามันค่อนข้างง่ายที่คุณสามารถกดC-sอีกครั้งเพื่อพันไปรอบ ๆ แต่สำหรับการค้นหา / แทนที่มันน่าเบื่อ

มีแฮ็คธรรมดา ๆ ที่ไม่ต้องกลับไปที่บัฟเฟอร์ด้านบนสำหรับการดำเนินการทั้งสองหรือไม่

คำตอบ:


6

Huh ดูเหมือนว่าคุณจะไม่สามารถ (นำมาจากที่นี่เน้นการเน้น):

เพื่อแทนที่ตัวอย่างของ 'foo' ทุกหลังจากจุดด้วย 'บาร์' ใช้คำสั่ง Mx แทนที่สตริงกับทั้งสองมีปากเสียงและfoo เปลี่ยนเกิดขึ้นเฉพาะหลังจากจุดดังนั้นหากคุณต้องการที่จะครอบคลุมบัฟเฟอร์ทั้งคุณต้องไปที่จุดเริ่มต้นครั้งแรกbar

โดยส่วนตัวแล้วฉันแบ่งบัฟเฟอร์เป็นสอง ( C-x 2), ไปที่ด้านบน ( C-Home) แล้วเรียกใช้คำสั่ง replace, สลับกลับไปที่บานหน้าต่างดั้งเดิมของฉัน ( C-x o) จากนั้นฆ่าที่สอง ( C-x 0) ไม่รู้ว่ามีเคล็ดลับที่จะทำให้ง่ายขึ้นหรือไม่


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

ใช้งานได้ดี แต่ไขอัพเคียวรีแทนที่ในภูมิภาค / ส่วนที่เลือก (ใช้กับบัฟเฟอร์ทั้งหมดเสมอ)
อเล็กซ์


0

ฉันใช้ด้านล่างเพื่อทำงานกับ 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)

โดยคำนึงถึงภูมิภาคนั้น ๆ เปลี่ยนขนาดตัวพิมพ์และจุดเริ่มต้นและสิ้นสุดจะถูกส่งผ่าน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.