เลือก (เช่นเป็นภูมิภาค) การแข่งขันปัจจุบันในการค้นหาแบบเพิ่มหน่วย


9

เมื่อค้นหาสตริงด้วยC-sฉันต้องการกดปุ่มบางปุ่มเพื่อออกจากโหมดค้นหาแต่ยังคงรักษาตัวเลือกของการจับคู่ไว้ ด้วยวิธีนี้ฉันสามารถเริ่มพิมพ์ได้ทันทีและแทนที่การแข่งขันครั้งสุดท้าย

ตัวอย่างเช่นสมมติว่าฉันมีเอกสารดังต่อไปนี้:

The quick brown fox jumps over the lazy dog.

หากฉันค้นหา "สันหลังยาว" emacs จะเลือกคำนั้นเช่นนั้น (วงเล็บเหลี่ยมคือการเลือก, ไพพ์คือเคอร์เซอร์):

The quick brown fox jumps over the [lazy|] dog.

ตอนนี้ถ้าฉันกดreturnemacs จะรักษาตำแหน่งเคอร์เซอร์ของฉัน แต่จะยกเลิกการเลือก "สันหลังยาว":

The quick brown fox jumps over the lazy| dog.

แทนที่จะเป็นเช่นนี้ฉันต้องการทางลัดที่จะออกจากโหมดการค้นหา แต่รักษาการเลือกการจับคู่ปัจจุบันไว้เหมือนในสถานะที่สองด้านบน


ไม่ใช่M-x query-replaceสิ่งที่คุณกำลังมองหาใช่ไหม
Nsukami _

1
@Nukukami_ ฉันไม่เคยรู้ว่าสิ่งที่ฉันต้องการให้แบบสอบถามของฉันหรือแม้กระทั่งสิ่งที่ฉันต้องการที่จะแทนที่ด้วยก่อนที่ฉันจะค้นหา มันง่ายกว่ามากที่จะกดC-sและพิมพ์สิ่งที่ฉันคิดว่าฉันต้องการค้นหาจากนั้นเปลี่ยนคิวรีที่มี backspace เป็นศูนย์ในสิ่งที่ฉันต้องการเปลี่ยน จากนั้นฉันก็เล่นกับสิ่งที่ฉันต้องการแทนที่ด้วย M-%เกินไป "เป็นทางการ"
Ben

ทางออกมีประโยชน์สำหรับฉันเช่นเมื่อฉันค้นหาคำเพื่อฆ่ามันแล้วดึงมันไปยังที่อื่น query-replaceไม่ได้แก้ปัญหานี้
GergelyPolonkai

คำตอบ:


7

นี่คือวิธีหนึ่ง:

(defun isearch-exit-mark-match ()
  "Exit isearch and mark the current match."
  (interactive)
  (isearch-exit)
  (push-mark isearch-other-end)
  (activate-mark))

(define-key isearch-mode-map (kbd "<C-return>") #'isearch-exit-mark-match)

วิธีนี้จะผูกคีย์ที่แตกต่างกัน (C-return) เพื่อออกจาก isearch ปัจจุบันและยังคงการแข่งขันนัดสุดท้ายที่เลือกไว้ นี้จะทำงานด้วยisearch-forward-regexpเช่นกันซึ่งเป็นประโยชน์


1
ฉันได้รับ "นิยามฟังก์ชั่นของ Symbol เป็นโมฆะ: bind-key" อยู่ที่ไหนbind-keyมาจากไหน
Ben

1
ขออภัยbind-keyมาจากห้องสมุดอื่น ฉันเปลี่ยนคำตอบเพื่อใช้define-keyฟังก์ชั่นในตัวแทน
ลูกัส

4

Library Isearch +ช่วยให้คุณทำเช่นนั้นได้อย่างง่ายดายและแม้กระทั่งเปิด / ปิดได้ทันที

  • ตัวเลือกที่ไม่ใช่ศูนย์isearchp-set-region-flagจะตั้งค่าภูมิภาค (ตัวเลือก) รอบเป้าหมายการค้นหาล่าสุดเมื่อคุณออกจากการค้นหา

  • คำสั่งisearchp-toggle-set-regionผูกพันกับM-s M-SPCช่วง iSearch isearchp-set-region-flagตัวเลือกสลับ

  • คำสั่งset-region-around-search-targetตั้งค่าพื้นที่รอบ ๆ เป้าหมายการค้นหาล่าสุดด้วยตนเอง (ดังนั้นแม้ว่าจะไม่ได้ตั้งค่าตัวเลือกดังนั้นคุณจะไม่ได้รับการเลือกอัตโนมัติคุณสามารถทำได้ด้วยตนเอง)


ห้องสมุดแทนที่ +ช่วยให้คุณทำสิ่งเดียวกันสำหรับquery-replaceฯลฯ มันทำให้บริเวณรอบ ๆ (เช่นเลือก) เกิดการเปลี่ยนผ่านมา มันใช้ตัวเลือกเดียวกันisearchp-set-region-flagเพื่อควบคุมสิ่งนี้และคำสั่งset-region-around-search-targetจะมีผลเหมือนกัน

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