Używam Vima jako 3-kierunkowego połączenia z Git i czasami muszę wprowadzać zmiany zarówno z lokalnych, jak i zdalnych oddziałów. kdiff3
można to zrobić za pomocą kilku naciśnięć klawiszy, czy jest na to sposób w Vimie?
Niezupełnie to, o co prosiłeś, ale może okazać się przydatne: Wtyczka splice: wtyczka Vima do rozwiązywania konfliktów podczas łączenia trójstronnego . Ma fajny zrzut ekranu demonstracyjnego na Vimeo .
Jeśli masz zamiar pozostać przy domyślnym vimdiff, możesz utworzyć funkcję pobierania numeru bufora dla otaczających go okien i użyć ich do :diffget
dwukrotnego wywołania :
*: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")
Możesz użyć mapowania, aby przypisać wywołanie tej funkcji do klawiszy, w których byłeś używany kdiff3
.
Możesz znaleźć dalsze informacje na temat tego vimcastu .
yank i put może działać bez żadnych wtyczek i dodatkowych funkcji, choć może jest to nieco mniej wygodne niż dglubdp
Po prostu skopiuj potrzebne bity z buforów nadrzędnych i wklej je w odpowiednie miejsce w scalonym buforze. Jest to również przydatne, jeśli chcesz tylko część bloku różnicowego, a nie całość.
Czasami możesz potrzebować zmusić Vima do zaktualizowania podświetlania różnic :diffupdate
.
Możesz po prostu usunąć linie ze znacznikami konfliktu Git. Poniższe dwie metody usuną wszystkie linie zaczynające się od:
<<<<<<<
=======
>>>>>>>
Metoda 1: Ręczne wprowadzanie i wykonywanie polecenia
:g/^<\{7}\|^|\{7}\|^=\{7}\|^>\{7}/d
Metoda 2: Implementacja polecenia zdefiniowanego przez użytkownika
"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 i diffput wybiorą tylko jedną gałąź lub drugą. Tak więc jedynym prawdziwym rozwiązaniem innym niż to podane powyżej jest ręczne szarpanie i wklejanie obu plików do kopii roboczej.