Vim'i birleştirme aracı olarak kullanırken “her ikisini de almanın” bir yolu var mı?


11

Git ile de 3 yönlü birleştirme olarak Vim kullanıyorum ve bazen hem yerel hem de uzak dallardan değişiklik almam gerekiyor. kdiff3bunu birkaç tuşa basarak yapabilirsiniz, Vim'de bunu yapmanın bir yolu var mı?

Yanıtlar:


6

Tam olarak sorduğunuz gibi değil, ancak yararlı olabilir: Splice eklentisi: üç yönlü birleştirme sırasında çakışmaları çözmek için bir Vim eklentisi . Vimeo'da güzel bir demo screencast var .

Varsayılan vimdiff ile yapışacaksanız, vekil pencereler için arabellek numarasını almak ve bunları :diffgetiki kez aramak için kullanabilirsiniz :

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

Kullandığınız tuşlara bu işleve çağrı atamak için bir eşleme kullanabilirler kdiff3.

Bu vimcast hakkında daha fazla bilgi bulabilirsiniz .


3

yank ve put herhangi bir eklenti veya ekstra işlev olmadan çalışabilir, ancak belki de dgveyadp

Üst bitlerden gerekli bitleri kopyalayın ve birleştirilen arabellekteki doğru noktaya yapıştırın. Bu, her şeyden çok bir fark bloğunun sadece bir parçasını istiyorsanız da yararlıdır.

Bazen, Vim'i fark vurgulamayı güncellemeye zorlamanız gerekebilir :diffupdate.


1

Hem hedef hem de birleştirme dallarındaki değişiklikleri tek bir komutta birleştirmek için:

Git çakışma işaretçileri olan satırları silebilirsiniz. Aşağıdaki iki yöntem, ile başlayan tüm satırları siler:

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

Yöntem 1: El ile Komut Girme ve Yürütme

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

Yöntem 2: Kullanıcı Tanımlı Komut Uygulama

"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 ve diffput sadece bir dal veya diğerini seçecektir. Dolayısıyla, yukarıda verilenin dışındaki tek gerçek çözüm, manuel olarak her iki dosyadan çalışma kopyasına çekip yapıştırmaktır.


Aşağıya inecekseniz bir sebep verin.
user3751385

Tüm yaptığım bu - sadece işaretleri silin.
Aaron McMillin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.