Apakah ada cara untuk "mengambil keduanya" saat menggunakan Vim sebagai alat penggabungan?


11

Saya menggunakan Vim sebagai penggabungan 3 arah juga dengan Git dan kadang-kadang perlu mengambil perubahan dari cabang lokal dan jauh. kdiff3dapat melakukan ini dengan beberapa penekanan tombol, apakah ada cara untuk melakukan ini di Vim?

Jawaban:


6

Tidak persis seperti yang Anda tanyakan, tetapi mungkin menemukan ini berguna: Splice plugin: plugin Vim untuk menyelesaikan konflik selama penggabungan tiga arah . Ini memiliki demo layar yang bagus di Vimeo .

Jika Anda akan tetap menggunakan vimdiff default, Anda dapat membuat fungsi untuk mengambil nomor buffer untuk windows surronding dan menggunakannya untuk memanggil :diffgetdua kali:

                            *: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")

Anda dapat menggunakan pemetaan untuk menetapkan panggilan ke fungsi ini ke tombol yang Anda gunakan kdiff3.

Anda dapat menemukan informasi lebih lanjut tentang siaran ini .


3

yank dan put dapat bekerja tanpa plugin atau fungsi tambahan, meskipun mungkin sedikit kurang nyaman daripada dgataudp

Cukup salin bit yang diperlukan dari buffer induk dan tempel ke tempat yang benar di buffer gabungan. Ini juga berguna jika Anda ingin hanya bagian dari blok diff, daripada semuanya.

Anda mungkin, kadang-kadang, perlu memaksa Vim untuk memperbarui sorotan berbeda dengan :diffupdate.


1

Untuk menggabungkan perubahan dari target dan menggabungkan cabang dalam satu perintah:

Anda bisa menghapus baris dengan penanda konflik Git. Dua metode berikut akan menghapus semua baris yang dimulai dengan:

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

Metode 1: Secara Manual Memasukkan dan Melaksanakan Perintah

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

Metode 2: Menerapkan Perintah Buatan Pengguna

"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()

Vim diffget dan diffput hanya akan memilih satu cabang atau yang lain. Jadi satu-satunya solusi nyata selain yang diberikan di atas adalah secara manual menarik dan menempel dari kedua file ke dalam copy pekerjaan.


Berikan alasan jika Anda akan downvote.
user3751385

Ini yang saya lakukan - hapus saja markernya.
Aaron McMillin
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.