আপডেট 2015-06-28 : আমি একটি ছোট বাগ ঠিক করেছি, এবং এটি একটি প্লাগইন হিসাবে প্রকাশ করেছি । প্লাগইন কোডটি কিছুটা ভাল, কার্সারটি সরিয়ে দেওয়ার পরে এটি আবার সতর্ক করে; আমি আপনাকে প্লাগইন ব্যবহার করার পরামর্শ দিচ্ছি।
সুপারজারের উত্তরটি দুর্দান্ত কাজ করে তবে দুর্ভাগ্যজনক পার্শ্ব-প্রতিক্রিয়া রয়েছে যা আপনি কেবল সর্বশেষ ভিম সেশন থেকে পরিবর্তনগুলি পূর্বাবস্থায় রাখতে পারেন, এবং সমস্ত পূর্ববর্তী ভিম সেশনগুলি নয়।
এটি হ'ল wundo
পূর্বাবস্থায় ফিরিয়ে দেওয়া ফাইলগুলি; এটি একীভূত হয়নি আমি যতদূর জানি, এটি ঠিক করার কোনও উপায় নেই।
সুতরাং আমার বিকল্প সমাধানটি এখানে, আপনি যখন পূর্বাবস্থায় ফিরে আসা ফাইল থেকে পরিবর্তনগুলি পূর্বাভাস করছেন তখন এটি একটি বড় লাল সতর্কতা বার্তা প্রদর্শন করবে।
এটি ইনগো কারকাতের উত্তরের অনুরূপ , তবে এটিতে একটি বাহ্যিক প্লাগইন প্রয়োজন হয় না এবং এর কিছু সূক্ষ্ম পার্থক্য রয়েছে (বীপের পরিবর্তে সতর্কতা প্রদর্শন করে, আপনাকে 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