Как мне объединить две строки из одной ревизии и третью из другой в vimdiff? - PullRequest
1 голос
/ 02 мая 2019

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

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

Каждый раз, когда я сталкиваюсь с этим, я хочу сделать одно и то же: оставить две верхние строки от ГОЛОВНОЙ (розовый) и нижнюю строку от ДРУГОЙ (голубой).

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

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

Спасибо.

1 Ответ

4 голосов
/ 03 мая 2019

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

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

qq

Поиск конфликта:

/<<<<<<<

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

dd

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

/=======

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

V

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

/plan-path

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

d

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

/>>>>>>>

Удалить его

dd

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

q

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

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

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

42@q

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

...