Пропустить шаг отмены в 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/