Как отменить до последней записи в vim?

Позвольте мне задать вопрос таким образом. Я открываю новый файл в vim, (версия 1)

#include<stdio.h>
main()
{
...blah
}

а затем используйте <Esc>:w<Enter> для записи файла. Затем были внесены изменения (версия 2)

#include<stdio.h>
main()
{
...blah
... edit1
... edit2 //and large number of changes here and there in code
}

то я сохраняю изменения с помощью <Esc>:w<Enter>.

Есть ли способ отменить изменения в версии 1 напрямую (поскольку это было последнее сохранение), то есть без постоянного нажатия u для undo ing

Ответ 1

Из справки Vim:

:earlier {N}f   Go to older text state {N} file writes before.
                When changes were made since the last write
                ":earlier 1f" will revert the text to the state when
                it was written.  Otherwise it will go to the write
                before that.
                When at the state of the first file write, or when
                the file was not written, ":earlier 1f" will go to
                before the first change.

Итак, если вы не вносили изменений после второго сохранения, вы можете делать то, что хотите:

:earlier 1f

С другой стороны, если после второго сохранения были сохранены несохраненные изменения, выполните следующие действия:

:earlier 2f

решит вашу проблему.

См. :help :earlier, :help :undolist.

Ответ 2

Вы можете вернуться к началу, когда вы впервые открыли файл довольно легко. Просто введите число до u.

10000u, отменит 10000 раз. Если этого недостаточно, попробуйте 1000000u:)

Если вы хотите отменить бит бит, вы можете сделать это с любым шагом, попробуйте 5u.

Если вы просто хотите перезагрузить файл с диска, используйте :e.