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

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

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

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

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

2 ответа

Решение

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

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

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

  1. Брэм, чтобы добавить его в качестве отдельной функции в будущей версии
  2. кто-то, чтобы реализовать это в плагине путем интеграции с чем-то, что уже может делать слияния (например, git/hg)

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


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

Есть ли способ сохранить изменения 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

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

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

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

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

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

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

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

Другие вопросы по тегам