Пропустить шаг отмены в Vim

Скажем, я в состоянии А в своем документе. Затем я делаю изменения B, C и D (по порядку).

Есть ли способ сохранить изменения B и D, но пропустить C?

Или, скажем, я в состоянии А в моем документе. Я делаю изменения B, отменю его, а затем делаю изменения C и D (поэтому у Vim есть дерево отмены с двумя ветвями). Затем я передумал и решил, что хочу использовать B и D, но не C.

Как я могу сделать это в Vim? У меня установлен плагин gundo.vim, но я не использовал его так сильно.

Ответы

Ответ 1

Хорошо, я возьму в этом удар и скажу: "Нет, я не думаю, что есть способ сделать именно то, что вы хотите с помощью vim".

gundo.vim добавляет хороший интерфейс для vim undo, но не меняет его основных возможностей. Поэтому я взглянул на официальные документы vim, чтобы узнать, есть ли какие-либо намеки на возможность этого:

Ничего о слиянии двух ветвей вместе. Я думаю, что ewh и ZyX правы: чтобы получить общее решение для слияния B с D, vim понадобится либо для

  • Bram добавит его как отдельную функцию в будущую версию
  • кто-то реализует его в плагине, интегрируя с чем-то, что уже может слияния (например, git/hg)

Вы можете, конечно, попробовать сделать это вручную, имея файлы с версиями B, C и D, а также несколько различий.


Примечание: Если я неправильно понял, и вы не задавались вопросом об общем решении и ищете помощь с конкретным экземпляром этого вопроса, дайте мне знать, и я увижу, что я могу сделать: )

Ответ 2

Есть ли способ сохранить изменения B и D, но пропустить C?

Вы находитесь в состоянии D.: w file.ext_D

Возврат в состояние C.: w file_ext_C

Возврат в состояние B.: w file.ext_B

:!kdiff3 file.ext_B file.ext_C file.ext_D

Это дает 3-х мерное слияние различий, но вам все равно придется вручную входить и выбирать каждую красную строку в D для каждого конфликта слияния. Не совсем простое решение.

Если вместо этого вы делаете

:!kdiff3 file.ext_C file.ext_B file.ext_D

Затем слияние происходит автоматически (кроме отдельных строк с несколькими изменениями)

Для более сложных сценариев он становится более жестким.

Примечание. Я не уверен, что инструмент управления ревизией очень помогает. Вы в основном делаете что-то вроде создания патча между B и D, а затем вычитаете патч от C до D. Мне кажется, что системы контроля версий обычно предназначены для управления слияниями между различными источниками изменений, а не изменениями по одной ветки.

kdiff3 доступен по адресу: http://kdiff3.sourceforge.net/