มีวิธี "ใช้ทั้งคู่" เมื่อใช้ Vim เป็นเครื่องมือผสานหรือไม่?


11

ฉันใช้ Vim เป็นแบบ 3 ทางผสานกับ Git และบางครั้งจำเป็นต้องทำการเปลี่ยนแปลงจากสาขาทั้งในและนอกเมือง kdiff3สามารถทำได้ด้วยการกดปุ่มสองครั้งมีวิธีการทำใน Vim หรือไม่?

คำตอบ:


6

ไม่ว่าสิ่งที่คุณถาม แต่อาจพบนี้มีประโยชน์: Splice ปลั๊กอินที่: กลุ่มปลั๊กอินสำหรับความขัดแย้งในการแก้ไขปัญหาในระหว่างการรวมสามทาง แต่ก็มีความสุขscreencast สาธิต on Vimeo

หากคุณกำลังจะติดกับ vimdiff เริ่มต้นคุณสามารถสร้างฟังก์ชั่นเพื่อดึงหมายเลขบัฟเฟอร์สำหรับหน้าต่าง surronding windows และใช้พวกเขาเพื่อเรียก:diffgetสองครั้ง:

                            *:diffg* *:diffget*
:[range]diffg[et] [bufspec]
        Modify the current buffer to undo difference with another
        buffer.  If [bufspec] is given, that buffer is used.  If
        [bufspec] refers to the current buffer then nothing happens.
        Otherwise this only works if there is one other buffer in diff

(...)

The [bufspec] argument above can be a buffer number, a pattern for a buffer
name or a part of a buffer name.  Examples:

    :diffget        Use the other buffer which is in diff mode
    :diffget 3      Use buffer 3
    :diffget v2     Use the buffer which matches "v2" and is in
                diff mode (e.g., "file.c.v2")

kdiff3คุณพวกเขาสามารถใช้การทำแผนที่ที่จะกำหนดให้การเรียกร้องให้ฟังก์ชั่นนี้เพื่อกุญแจที่คุณใช้ใน

คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับ vimcastนี้


3

yank และput สามารถทำงานได้โดยไม่ต้องใช้ปลั๊กอินหรือฟังก์ชั่นพิเศษใด ๆ ถึงแม้ว่ามันอาจจะสะดวกกว่าdgหรือน้อยกว่าเล็กน้อยdp

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

คุณอาจจะในบางครั้งจำเป็นต้องบังคับให้เป็นกลุ่มเพื่ออัปเดต diff :diffupdateเน้นกับ


1

หากต้องการรวมการเปลี่ยนแปลงจากทั้งเป้าหมายและผสานสาขาในคำสั่งเดียว:

คุณสามารถลบบรรทัดด้วยเครื่องหมายความขัดแย้ง Git สองวิธีต่อไปนี้จะลบบรรทัดทั้งหมดที่ขึ้นต้นด้วย:

<<<<<<<
=======
>>>>>>>

วิธีที่ 1: การ ป้อนและดำเนินการคำสั่งด้วยตนเอง

:g/^<\{7}\|^|\{7}\|^=\{7}\|^>\{7}/d

วิธีที่ 2: การใช้คำสั่งที่ผู้ใช้กำหนด

"Delete all Git conflict markers
"Creates the command :GremoveConflictMarkers
function! RemoveConflictMarkers() range
  echom a:firstline.'-'.a:lastline
  execute a:firstline.','.a:lastline . ' g/^<\{7}\|^|\{7}\|^=\{7}\|^>\{7}/d'
endfunction
"-range=% default is whole file
command! -range=% GremoveConflictMarkers <line1>,<line2>call RemoveConflictMarkers()

เป็นกลุ่มdiffgetและdiffputจะเลือกสาขาหนึ่งหรืออื่น ๆ ดังนั้นทางออกที่แท้จริงเพียงอย่างเดียวนอกเหนือจากที่ระบุข้างต้นคือการดึงและวางจากไฟล์ทั้งสองลงในสำเนาการทำงาน


ให้เหตุผลถ้าคุณกำลังจะลงคะแนน
user3751385

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