Пропустить отменить шаг в Vim - PullRequest
19 голосов
/ 25 апреля 2011

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 27 апреля 2011

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

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

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

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

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


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

1 голос
/ 28 апреля 2011

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

...