2015-06-28 업데이트 : 작은 버그가 수정되어 플러그인으로 출시되었습니다 . 플러그인 코드는 커서를 움직 인 후 다시 경고한다는 점에서 약간 더 좋습니다. 플러그인을 사용하는 것이 좋습니다.
에서 대답 superjer는 잘 작동하지만 마지막 빔 세션의 변경, 그리고 취소 만 할 수 불행한 부작용이 모든 이전 빔 세션을.
wundo
실행 취소 파일을 덮어 쓰기 때문입니다 . 병합되지 않았습니다. 내가 아는 한이 문제를 해결할 방법이 없습니다.
대체 해결책은 다음과 같습니다. 실행 취소 파일에서 변경 사항을 취소 할 때 큰 빨간색 경고 메시지가 표시됩니다.
이것은 Ingo Karkat의 답변 과 비슷 하지만 외부 플러그인이 필요하지 않으며 약간의 차이가 있습니다 (경고음 대신 경고 표시, u
두 번 누를 필요가 없음 ).
이 참고 만 수정합니다 u
및 <C-r>
바인딩, 그리고 하지U
, :undo
및 :redo
명령.
" Use the undo file
set undofile
" When loading a file, store the curent undo sequence
augroup undo
autocmd!
autocmd BufReadPost,BufCreate,BufNewFile * let b:undo_saved = undotree()['seq_cur'] | let b:undo_warned = 0
augroup end
" Remap the keys
nnoremap u :call Undo()<Cr>u
nnoremap <C-r> <C-r>:call Redo()<Cr>
fun! Undo()
" Don't do anything if we can't modify the buffer or there's no filename
if !&l:modifiable || expand('%') == '' | return | endif
" Warn if the current undo sequence is lower (older) than whatever it was
" when opening the file
if !b:undo_warned && undotree()['seq_cur'] <= b:undo_saved
let b:undo_warned = 1
echohl ErrorMsg | echo 'WARNING! Using undofile!' | echohl None
sleep 1
endif
endfun
fun! Redo()
" Don't do anything if we can't modify the buffer or there's no filename
if !&l:modifiable || expand('%') == '' | return | endif
" Reset the warning flag
if &l:modifiable && b:undo_warned && undotree()['seq_cur'] >= b:undo_saved
let b:undo_warned = 0
endif
endfun