ประโยชน์ของการแลกเปลี่ยนจุดและเครื่องหมายคืออะไร?


16

exchange-point-and-markคำสั่งที่ถูกผูกไว้C-x C-xแต่ฉันไม่สามารถคิดกรณีการใช้งานใด ๆ ที่จะทำให้มันสมควรเช่นที่โดดเด่นที่มีผลผูกพัน

ฉันจะใช้exchange-point-and-markเพื่อปรับปรุงเทคนิคการแก้ไขของฉันได้อย่างไร

คำตอบ:


19

มีสองกรณีที่ฉันนึกถึง: เปิดใช้งานพื้นที่อีกครั้งและปรับขนาดของพื้นที่

ฉันมักใช้การเชื่อมโยงนี้เพื่อเปิดใช้งานพื้นที่อีกครั้งหลังจากดำเนินการคำสั่งบางอย่างที่เลิกใช้งานหรือทำสิ่งที่กำหนดเครื่องหมายและการย้ายจุดโดยไม่ต้องเปิดใช้งานพื้นที่

ตัวอย่างเช่นทำ Cs และค้นหาสิ่งที่ต้องการ กด RET เพื่อออกจากการค้นหาจากนั้น Cx Cx เพื่อทำเครื่องหมายทุกอย่างจากที่ที่คุณเริ่มการค้นหา

อีกตัวอย่างหนึ่งที่ฉันทำมากเมื่อฉันต้องการรวมตัวอย่าง elisp ในคำตอบ StackExchange:

  1. ทำเครื่องหมายบิตของรหัสที่ฉันต้องการคัดลอก
  2. กด Cu Cx TAB เพื่อเยื้องรหัสด้วย 4 ช่องว่าง ด้วยวิธีนี้มันจะแสดงผลเป็นรหัสที่นี่ในเว็บไซต์ ขั้นตอนนี้จะปิดการใช้งานภูมิภาค
  3. กด Cx Cx เพื่อเปิดใช้งานพื้นที่อีกครั้งจากนั้น Mw เพื่อคัดลอกไปยังคลิปบอร์ดเพื่อให้ฉันสามารถวางลงในคำตอบ StackExchange ของฉัน

อีกกรณีคือเมื่อคุณกำลังทำเครื่องหมายภูมิภาคและต้องการขยาย / ย่อขนาด ในกรณีนี้คุณสามารถข้ามไปยัง "ส่วนอื่น ๆ " ของพื้นที่ได้สะดวกย้ายมันแล้วกระโดดกลับ หากพื้นที่ดังกล่าวเปิดใช้งานอยู่การกด Cx Cx จะทำให้พื้นที่ใช้งานได้


17

ถาม Emacs: C-h r i exchange-point-and-mark RETหรือดีกว่า, C-h r i C-x C-x RET. สิ่งนี้จะนำคุณไปสู่ข้อมูลที่แสดงด้านล่าง

นี่คือคู่มือ Emacs การตั้งค่าโหนดระบุว่าตอบคำถามของคุณ:

C-x C-xเป็นประโยชน์เมื่อคุณมีความพึงพอใจกับตำแหน่งของจุด แต่ต้องการที่จะย้ายในส่วนอื่น ๆ ของภูมิภาค (ซึ่งเครื่องหมายนั้น) C-x C-xหากจำเป็นให้ใส่เครื่องหมายที่ตำแหน่งใหม่โดยใช้ครั้งที่สองหากจำเป็นให้กลับไปที่ตำแหน่งเดิม โดยปกติหากเครื่องหมายไม่แอ็คทีฟคำสั่งนี้จะเปิดใช้งานเครื่องหมายอีกครั้งก่อนที่จะถูกตั้งค่าล่าสุดเพื่อให้แน่ใจว่าพื้นที่ถูกไฮไลต์ไว้ อย่างไรก็ตามหากคุณเรียกมันว่ามีอาร์กิวเมนต์นำหน้ามันจะทำให้เครื่องหมายไม่ทำงานและพื้นที่ที่ไม่ได้รับแสงสว่าง คุณสามารถใช้วิธีนี้เพื่อข้ามไปยังเครื่องหมายC-u C-<SPC>ในลักษณะจะคล้ายกัน

และนี่คือสิ่งที่มันบอกเกี่ยวกับมันในโหนดDisabled Transient Mark :

การปิด [ transient-mark-mode] ปิดสวิตช์ Emacs เป็นโหมดการทำงานอื่น:

  • การตั้งเครื่องหมายด้วยคำสั่งเช่นC-<SPC>หรือC-x C-xไม่เน้นบริเวณนั้น ดังนั้นคุณไม่สามารถบอกได้โดยดูที่เครื่องหมายนั้น คุณต้องจำไว้

    วิธีแก้ปัญหาตามปกติสำหรับปัญหานี้คือการกำหนดเครื่องหมายและใช้งานในไม่ช้าก่อนที่คุณจะลืมว่าอยู่ที่ไหน นอกจากนี้คุณยังสามารถตรวจสอบที่เครื่องหมายโดยใช้C-x C-xซึ่งการแลกเปลี่ยนตำแหน่งของจุดและเครื่องหมาย - ดูการตั้งมาร์ค

ขณะที่โหมดการ Transient มาร์คปิดคุณสามารถเปิดใช้งานได้ชั่วคราวโดยใช้หรือC-<SPC> C-<SPC>C-u C-x C-x

และ:

C-u C-x C-x แลกเปลี่ยนจุดและเครื่องหมายเปิดใช้งานการทำเครื่องหมายและเปิดใช้งานโหมด Transient Mark ชั่วคราวจนกว่าเครื่องหมายจะถูกปิดการใช้งานต่อไป (นี่คือC-x C-xคำสั่งexchange-point-and-markโดยมีอาร์กิวเมนต์นำหน้า)


8

ฉันใช้สิ่งนี้เมื่อฉันสูญเสียการเลือกเนื่องจากการดำเนินการบางอย่างที่ลบออกไปและฉันต้องการคืนค่าการเลือก หนึ่งในสถานการณ์ดังกล่าวจะเป็น:

  1. เลือกสี่เหลี่ยมผืนผ้า
  2. ฆ่ามัน
  3. เลิกทำการฆ่าสี่เหลี่ยม
  4. C-x C-x เพื่อเรียกคืนสิ่งที่เลือกไปยังสี่เหลี่ยมผืนผ้า

สิ่งนี้เกิดขึ้นเมื่อฉันต้องการสำรองข้อมูลแบบเฉพาะกิจของพื้นที่ที่เลือกและเพื่อทำการทดลองกับสำเนาเช่นฉันต้องการค้นหาและแทนที่บางอย่าง แต่ฉันไม่สามารถคิดวิธีที่จะทำ มันเป็นวิธีที่ไม่ทำลายข้อความบางส่วนซึ่งมีความหมายว่าจะยังคงอยู่ดังนั้นในภายหลังฉันจะเปลี่ยนมันจากสำเนา


8

คำตอบอื่น ๆ จะเน้นที่ประโยชน์ของการใช้งานC-x C-xเมื่อtransient-mark-modeใด แต่C-x C-xมีมาก่อนtransient-mark-modeและมีประโยชน์อย่างอิสระจากมัน

บทบาทหลักของC-x C-xคือการแลกเปลี่ยนจุดและเครื่องหมาย สิ่งนี้มีประโยชน์เมื่อคุณกำลังแก้ไขสองจุดในบัฟเฟอร์เดียวและด้วยเหตุผลบางอย่างไม่ต้องการแยกหน้าต่างปัจจุบัน ทำการแก้ไขตั้งเครื่องหมายย้ายไปยังจุดอื่น ๆ ในบัฟเฟอร์ทำการแก้ไขC-x C-xบางอย่างทำการแก้ไขบางอย่างในที่เดิมC-x C-xทำการแก้ไขเพิ่มเติมโฆษณาคลื่นไส้ (หากคุณไม่ได้วางแผนที่จะกลับมาที่จุดที่สองC-u C-SPCอาจเป็นเรื่องที่เข้าใจได้ง่ายขึ้นค้นหาเครื่องหมายวงแหวนในคู่มือ Emacs)

เมื่อtransient-mark-modeปิดการใช้งานC-x C-xมีจุดประสงค์สำคัญอื่น: ช่วยให้คุณทราบว่าภูมิภาคอยู่ที่ไหน C-x C-xเหลือบไปที่จุดC-x C-xอีกครั้ง

(และในกรณีที่คุณสงสัย - ใช่พวกเราบางคนยังต้องการใช้ Emacs กับtransient-mark-modeคนพิการ)

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