Пропустить отменить шаг в 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 потребуется либо для
- Брэм, чтобы добавить его в качестве отдельной функции в будущей версии
- кто-то, чтобы реализовать это в плагине путем интеграции с чем-то, что уже может делать слияния (например, 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/