Отменить приятно иметь в Vim. Но иногда, в известном хорошем моменте, я хочу стереть свою историю отмены - чтобы иметь возможность использовать u
для отмены отдельных изменений, но только назад к определенной точке. (Например, это может быть когда я последний раз совершал.)
Один из способов сделать это - закрыть и снова открыть файл - история отмены начинается с этого момента. Но это хлопоты.
В прошлом я достиг этого с :edit!
. Но в Vim 7.3 это не отменяет историю отмен.
Есть ли другой способ сделать это, кроме закрытия файла?
git checkout -f file
илиhg rollback file
?u
для отмены отдельных изменений, но не после того момента, когда я последний раз совершал. Точно так же, как если бы, каждый раз, когда я совершал коммит, я закрывал файл и снова открывал его. Что и делалось:edit!
раньше - это было похоже на закрытие файла и его повторное открытие. Это НЕ ДОЛЖНО быть привязано к точке фиксации, это как раз тот момент, когда я бы чаще всего этого хотел.Ответы:
должен делать то, что вы просите.
источник
Старый: редактировать! поведение в одной строке:
источник
:h :exe
,:h :bar
,:h :set-args
,:h 'ul'
и:h :edit!
.Функция Бенуа у меня не сработала, но я нашел что-то похожее в руководстве vim здесь:
http://www.polarhome.com/vim/manual/v73/undo.html#undo-remarks
Я добавил его в функцию, добавил в свой vimrc, и, похоже, он отлично работает на vim 7.3:
Это может быть использовано с
:ClearUndo
.источник
Вероятно:
(
'ul'
это псевдоним для'undolevels'
).источник
:edit!
. Для начала я создал функцию под названием ClearUndos () с указанными вами командами, но ее вызов, похоже, ничего не делает, тогда как выполнение команд по отдельности делает ...:command -nargs=0 Reset let old_ul=&ul | set ul=-1 | e! | let &ul = old_ul | unlet old_ul
|
в командный контент. Затем создайте функцию, которая делает то, что я сказал в своем ответе, и установите команду наcall thefunction()
.Msgstr "Очистить историю отмен ((w, чтобы очистить файл отмены, если есть)
command! -bar UndoClear exe "set ul=-1 | m-1 | let &ul=" . &ul
m-1
, которое фактически не меняет ваш текст.'undofile'
включено,:w
чтобы очистить файл отмены или цепочку, какUndoClear|w
.источник
В скрипте:
Затем используйте,
:Reset
чтобы позвонить.источник
set ul=
команда влияет только на локальную переменную до тех пор, пока сценарий не завершится, и, поскольку мы изменим ее обратно до завершения работы сценария, она никогда не повлияет на среду? Вы тестировали эту функцию и она работала - значит, что-то странное в моей настройке?