Відповіді:
Не зовсім те, що ви просили, але це може бути корисним: Splice plugin: плагін Vim для вирішення конфліктів під час тристороннього злиття . Він має хороший демонстраційний показ на Vimeo .
Якщо ви збираєтеся дотримуватися вимдіффа за замовчуванням, ви можете створити функцію для отримання номера буфера для вікон, що надходять, і використовувати їх для виклику :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 .
yank і put можуть працювати без плагінів чи додаткових функцій, хоча це, мабуть, трохи менш зручно, ніж dgабоdp
Просто скопіюйте потрібні біти з батьківських буферів і вставте їх у потрібне місце у об'єднаному буфері. Це також корисно, якщо ви хочете лише частину розрізного блоку, а не всю справу.
Можливо, вам часом доведеться змусити Vim оновлювати підсвічування різниці :diffupdate
.
Ви можете просто видалити рядки за допомогою маркерів конфлікту 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()
Vim diffget і diffput будуть вибирати лише одну гілку або іншу. Тож єдине реальне рішення, окрім наведеного вище, - це вручну витягнути та вставити з обох файлів у робочу копію.