วิธีคัดลอกสี่เหลี่ยมผืนผ้าฆ่าไปยังแหวนฆ่า


11

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

คู่มือ GNU Emacsได้นี้จะพูดว่า:

“ การฆ่า” สี่เหลี่ยมผืนผ้าไม่ได้ฆ่าตามปกติ สี่เหลี่ยมนั้นไม่ได้ถูกจัดเก็บไว้ในวงแหวนฆ่า แต่ในสถานที่พิเศษที่จะบันทึกสี่เหลี่ยมที่ฆ่าล่าสุดเท่านั้น เนื่องจาก yanking สี่เหลี่ยมนั้นแตกต่างจาก yanking linear text ที่ต้องใช้คำสั่ง yank ต่างกัน Yank-popping ไม่ได้ถูกกำหนดสำหรับสี่เหลี่ยม

อย่างไรก็ตามโดยทั่วไปฉันสามารถรับพฤติกรรมที่ฉันต้องการได้

  • M-> ไปที่จุดสิ้นสุดของบัฟเฟอร์
  • C-x r y งัดสี่เหลี่ยมผืนผ้า
  • C-x C-x จุดแลกเปลี่ยนและเครื่องหมาย (เลือกเส้นที่ถูกดึงใหม่)
  • C-w ฆ่าสิ่งที่เลือกไปยังวงแหวนฆ่า

มีวิธีที่ดีกว่าในการเปลี่ยนสี่เหลี่ยมที่ถูกฆ่าให้กลายเป็นรายการวงสังหารหรือไม่?


โซลูชันที่เชื่อมโยงไม่ใช่สิ่งที่คุณขอ แต่มันกระชากรูปสี่เหลี่ยมตามที่คุณต้องการ: emacs.stackexchange.com/a/46352/15749
jue

คำตอบ:


6

หากฉันเข้าใจคำถามของคุณคุณกำลังมองหาสิ่งนี้:

(defun youngfrog/copy-rectangle-to-kill-ring (start end)
  "Saves a rectangle to the normal kill ring. Not suitable for yank-rectangle."
  (interactive "r")
  (let ((lines (extract-rectangle start end)))
    (with-temp-buffer
      (while lines ;; insert-rectangle, but without the unneeded stuff
        ;; (most importantly no push-mark)
        (insert-for-yank (car lines))
        (insert "\n")
        (setq lines (cdr lines)))
      (kill-ring-save (point-min) (point-max)))))

ความอนุเคราะห์จากErgoEmacs


3

ไม่แน่ใจว่ามีอะไรพิเศษเกี่ยวกับสี่เหลี่ยมใน kill-ring แต่ถ้าคุณอัพเกรดเป็น Emacs-24.4 คุณสามารถทำได้: C-x SPC .... M-wเพื่อเลือกสี่เหลี่ยมและวางมันบน kill-ring หลังจากนั้นC-yก็จะดึงสี่เหลี่ยมผืนผ้าC-x r yนั้นออกมา


มีสองสิ่งเกี่ยวกับแหวนสังหารที่เป็น "พิเศษ" สิ่งที่สำคัญที่สุด (สำหรับฉัน) คือวิธีที่ไอเท็มจากวงแหวนฆ่าถูกดึง เพียงแค่ดึงเอาข้อความที่มีอยู่เลื่อนลงแทนที่จะเลื่อนไปทางขวา การใช้แหวนสังหารยังมีประโยชน์ด้านการรักษาประวัติข้อความที่ถูกฆ่า ดูเหมือนว่า 24.4 อาจให้ประโยชน์ที่สอง แต่ไม่ใช่ครั้งแรก
nispio

แน่นอนในกรณีนี้พฤติกรรมใหม่ของ 24.4 จะช่วยปรับปรุงส่วนที่คุณไม่สนใจ
สเตฟาน

1

ตอนแรกฉันรู้สึกรำคาญเมื่อไม่มีวิธีแก้ปัญหาแบบบิวด์อินจากนั้นก็รู้ว่ามีวิธีแก้ปัญหาแบบบิวด์อิน: สี่เหลี่ยมผืนผ้าฆ่า

สมมติว่าคุณมีข้อความเช่น

AAA BBBBBBBBB
AAA BBB
AAA BBBBBBB

แต่ต้องการส่วน 'B' ของข้อความที่อื่นเช่นระหว่างบรรทัด C และ D:

CCCCC
CCC
DDDD
DD

หากคุณคัดลอกสี่เหลี่ยม B ( C-x r M-w) แล้ววางจุดที่จุดแรก 'D' จากนั้นดึงสี่เหลี่ยมผืนผ้ากลับมา ( C-x r y) คุณจะพบกับ

CCCCC
CCC
BBBBBBBBBDDDD
BBB      DD
BBBBBBB  

ที่คุณต้องการจริงๆ

CCCCC
CCC
BBBBBBBBB
BBB
BBBBBBB
DDDD
DD

อาจเป็นเรื่องธรรมดาที่จะคัดลอกสี่เหลี่ยมผืนผ้าของ 'B และดึงมันไปยังตำแหน่งใหม่ แต่วิธีที่ดีกว่าคือการคัดลอกบรรทัด' A และ 'B' และดึงพวกมันทั้งหมดระหว่าง 'C' และ ' เส้น D '

จากนั้นทำเครื่องหมายสี่เหลี่ยมที่มี 'A's และใช้kill-rectangle( C-x r k) เพื่อลงท้ายด้วยผลลัพธ์ที่ต้องการ

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