Как я могу объединить две строки из одной ревизии и третью из другой в vimdiff?

Я объединяю две ветки git вместе. Для этого я использую vimdiff, поэтому в моем терминале отображаются три панели vim.

Этот же конфликт возникает сотни раз при слиянии: vimdiff example

Каждый раз, когда я сталкиваюсь с этим, я хочу сделать одно и то же: сохранить две верхние строки от HEAD (розовые) и нижнюю строку от OTHER (синие).

На данный момент я печатаю: diffg 3 Чтобы принять изменения синего, затем перехожу в режим вставки и вручную меняю etc на var.

Я чувствую, что должен быть более быстрый способ, чтобы две верхние строки всегда были розовыми, а третья строка - синей. Есть? Это избавило бы меня от необходимости много печатать.

Спасибо.


person whatscool    schedule 02.05.2019    source источник


Ответы (1)


Если конфликт всегда один и тот же, возможно, вы можете использовать git rerere (Что такое git-rerere и как он работает?).

Если это не конфликт, возникающий из-за разных конфликтов (например, если конфликт присутствует в файле много раз), вы можете сделать макрос:

qq

Найдите конфликт:

/<<<<<<<

Удалите строку:

dd

Найдите середину конфликта:

/=======

Перейти в линейный визуальный режим:

V

Найдите строку непосредственно перед последней синей строкой, которую вы хотите сохранить:

/plan-path

Удалите все это:

d

Найдите окончание конфликта:

/>>>>>>>

Удали это

dd

Наконец, остановите макрос:

q

После того, как вы сделали макрос, подсчитайте количество вхождений конфликта:

:%s/<<<<<<<//n

Выполнить макрос столько раз:

42@q

Если у вас есть другие типы конфликтов, вы можете адаптировать макрос под свои нужды.

person padawin    schedule 02.05.2019
comment
Ваш макрос удаляет все «синие» различия ... OP хочет сохранить 3-ю строку - person D. Ben Knoble; 03.05.2019