จะใช้ตัวแปรทั้งสองใน Ediff อย่างไร


17

Ediff อินเตอร์เฟสมี+ปุ่ม แต่ดูเหมือนจะไม่ทำอะไรเลย (minibuffer แสดงให้เห็นว่า "ไม่มี" เมื่อฉันกดมัน) ฉันคิดว่าปุ่มนี้มีความหมายสำหรับการใช้ตัวแปรทั้งสองในบัฟเฟอร์ผลลัพธ์

อย่างไรก็ตามคำถามเดิมคือฉันจะทำให้ Ediff แก้ไขข้อขัดแย้งผสานได้อย่างไรโดยการใส่เนื้อหาจากทั้งบัฟเฟอร์ A และ B ลงในบัฟเฟอร์ C (ฉันรู้ว่าฉันสามารถแก้ไข C ได้ แต่หวังว่าจะทำได้ง่ายขึ้น)

สมมติว่าไฟล์Aคือ:

บรรทัดเดียวกัน

เส้นต่าง ๆ

บรรทัดเดียวกัน

ในขณะที่ไฟล์Bคือ:

บรรทัดเดียวกัน

สายอื่น

บรรทัดเดียวกัน

ฉันต้องการไฟล์Cซึ่งเป็นผลมาจากการรวมAกับBให้เป็นดังนี้:

บรรทัดเดียวกัน

เส้นต่าง ๆ

สายอื่น

บรรทัดเดียวกัน


ฉันไม่แน่ใจว่าฉันเข้าใจคำถามทั้งหมด แต่ส่วนของคู่มือ Ediff เกี่ยวกับการรวมและdiff3อาจช่วยได้
Tianxiang Xiong

@TianxiangXiong ฉันจะเพิ่มตัวอย่างของสิ่งที่ฉันหมายถึง ฉันไม่คิดว่าหน้าคู่มือที่เชื่อมโยงครอบคลุมถึงมัน
wvxvw

คำตอบ:


7

ดูStackOverflow คำตอบนี้

จาก@ killdash9 :

การกด d จะเป็นการคัดลอกทั้ง A และ B ไปยังบัฟเฟอร์ C

(defun ediff-copy-both-to-C ()
  (interactive)
  (ediff-copy-diff ediff-current-difference nil 'C nil
                   (concat
                    (ediff-get-region-contents ediff-current-difference 'A ediff-control-buffer)
                    (ediff-get-region-contents ediff-current-difference 'B ediff-control-buffer))))
(defun add-d-to-ediff-mode-map () (define-key ediff-mode-map "d" 'ediff-copy-both-to-C))
(add-hook 'ediff-keymap-setup-hook 'add-d-to-ediff-mode-map)

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

ฉันอยู่ภายใต้การแสดงผลที่ไซต์ StackExchange มักจะต้องการคำตอบในเว็บไซต์เองมากกว่าเพียงแค่ลิงค์ แต่อาจจะแตกต่างกันหากลิงค์เป็นไซต์ StackExchange อื่น / ยักไหล่
Tianxiang Xiong

จริง ๆ แล้วฉันไม่รู้ว่านโยบายอย่างเป็นทางการคืออะไร แต่ฉันคิดว่าการเชื่อมโยงภายในเครือข่ายควรได้รับการปฏิบัติแตกต่างจากการเชื่อมโยงนอกเครือข่าย การไม่ใช้ลิงก์โดยทั่วไปหมายความว่าคำตอบนั้นสามารถเข้าถึงได้แม้ว่าแหล่งข้อมูลระยะไกลจะไม่สามารถใช้งานได้ แต่ฉันคิดว่ามันคงไม่น่าเป็นไปได้ที่ส่วนหนึ่งของเครือข่าย StackExchange จะพร้อมใช้งานในเวลาใดก็ตาม ตรงจุดคำถามคือว่ามันมีเหตุผลที่จะแบ่งคำตอบระหว่างสองคำถามที่แตกต่างกันและฉันเชื่อว่าเกือบจะไม่เป็นประโยชน์ IMO แต่อย่างใด
phils

3

แก้ไข: ซ้ำ Q & A ใน StackOverflowมีคำตอบสำหรับคำถามนี้ (ตามที่ออกมาชี้โดยวินเทียนเสียง Xiong ในความคิดเห็น)

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


โดยส่วนตัวฉันจะแก้ไขบัฟเฟอร์การผสานโดยตรง แต่คุณสามารถสอน Emacs ว่าต้องทำอย่างไรถ้าคุณมีข้อกำหนดมาตรฐาน

+โทรediff-combine-diffs:

รวมส่วนต่างของบัฟเฟอร์ A และ B N และวางชุดค่าผสมใน C. N เป็นอาร์กิวเมนต์นำหน้า หากไม่มีรวมภูมิภาคที่แตกต่างในปัจจุบัน ediff-combination-patternรวมจะทำตามข้อกำหนดในตัวแปร

ซึ่งเป็น:

รูปแบบที่จะใช้สำหรับการรวมภูมิภาคที่แตกต่างในบัฟเฟอร์ A และ B ค่าต้องเป็นรายการของแบบฟอร์ม (STRING1 bufspec1 STRING2 bufspec2 STRING3 bufspec3 STRING4) ที่ bufspec เป็นสัญลักษณ์ A, B หรือบรรพบุรุษ ตัวอย่างเช่นหากค่าเป็น '(STRING1 A STRING2 Ancestor STRING3 B STRING4)ข้อความที่รวมกันจะมีลักษณะดังนี้:

STRING1
diff ภูมิภาคจากตัวแปร A ภูมิภาค
STRING2
จากบรรพบุรุษ
STRING3
ภูมิภาคต่างจากตัวแปร B
STRING4

โปรดทราบว่าเมื่อคุณคิดว่ามันไม่ได้ทำอะไรเลยจริง ๆ แล้วมันเป็นการรวมสายพันธุ์โดยใช้เครื่องหมายความขัดแย้งปกติ เช่นหากคุณเลือก A หรือ B อยู่แล้วค่าเริ่มต้น+จะเป็นวิธีในการคืนค่าความขัดแย้งเดิม


ฉันจะไม่แก้ไขการediff-combination-patternลบเครื่องหมายความขัดแย้งดั้งเดิมที่ใช้โดยค่าเริ่มต้นหรือไม่ ฉันต้องการเก็บความขัดแย้งแบบนั้นเอาไว้จนกว่าฉันจะแก้ไขได้โดยใช้ชุดค่าผสมที่แตกต่างจากไฟล์ที่ผสาน
wvxvw

เครื่องหมายความขัดแย้งเกิดขึ้นนอก Emacs ดังนั้นฉันจึงสงสัยว่าเป็นกรณีนี้ แต่ฉันไม่รู้จริงๆ ลองมัน?
phils

ฉันจะ แต่ภายหลังวันนี้ ฉันจะอัปเดตเมื่อฉันรู้
wvxvw

ในความเป็นจริงคุณถูกกระบวนการที่น่าทึ่งและแปลงพื้นที่ความขัดแย้งทั้งหมดตามรูปแบบนั้นก่อนที่จะนำเสนอบัฟเฟอร์ คุณอาจ แต่เพิ่มที่กำหนดเองที่มีผลผูกพันสำหรับคำสั่งที่ให้-ผูกกับรูปแบบของคุณเองและบริการโทรแล้วediff-combination-pattern ediff-combine-diffs
phils

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