23

Отменить приятно иметь в Vim. Но иногда, в известном хорошем моменте, я хочу стереть свою историю отмены - чтобы иметь возможность использовать u для отмены отдельных изменений, но только назад к определенной точке. (Например, это может быть когда я последний раз совершал.)

Один из способов сделать это - закрыть и снова открыть файл - с этого момента история отмены начинает очищаться. Но это хлопоты.

В прошлом я выполнял это с помощью :edit! , Но в Vim 7.3 это не отменяет историю отмен.

Есть ли другой способ сделать это, кроме закрытия файла?

6 ответов6

11
:set undoreload=0 | edit

должен делать то, что вы просите.

6

Старый: редактировать! поведение в одной строке:

:exe "set ul=-1 | e! | set ul=" . &ul
6

Функция Бенуа у меня не сработала, но я нашел что-то похожее в руководстве vim здесь:

http://www.polarhome.com/vim/manual/v73/undo.html#undo-remarks

Я добавил его в функцию, добавил в свой vimrc, и, похоже, он отлично работает на vim 7.3:

" A function to clear the undo history
function! <SID>ForgetUndo()
    let old_undolevels = &undolevels
    set undolevels=-1
    exe "normal a \<BS>\<Esc>"
    let &undolevels = old_undolevels
    unlet old_undolevels
endfunction
command -nargs=0 ClearUndo call <SID>ForgetUndo()

Это может быть использовано с :ClearUndo .

5

Наверное:

:let old_ul=&ul
:set ul=-1
:let &ul=old_ul
:unlet old_ul

('ul' - это псевдоним 'undolevels').

2

Msgstr "Очистить историю отмен ((w, чтобы очистить файл отмены, если есть)
command! -bar UndoClear exe "set ul=-1 | m-1 | let &ul=" . &ul

  • Когда вы устанавливаете 'undolevels' в -1, информация отмены не очищается сразу, это происходит при следующем изменении, то есть m-1 , который фактически не меняет ваш текст.
  • Когда 'undofile' :w чтобы очистить файл отмены, или цепочку, как UndoClear|w .
1

В скрипте:

function! <SID>ForgetUndo
     let old_ul = &ul
     set ul=-1
     let &ul = old_ul
     unlet old_ul
endfunction
command -nargs=0 Reset call <SID>ForgetUndo()

Затем используйте :Reset чтобы вызвать его.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .