Membatalkan bagus untuk dimiliki di Vim. Tetapi kadang-kadang, pada titik yang diketahui baik, saya ingin menghapus riwayat undo saya - untuk dapat digunakan u
untuk membatalkan perubahan individu, tetapi hanya kembali ke titik tertentu. (Misalnya, ini mungkin ketika saya terakhir berkomitmen.)
Salah satu cara untuk mencapai ini adalah dengan menutup dan membuka kembali file - sejarah undo mulai bersih pada saat itu. Tapi itu merepotkan.
Di masa lalu, saya menyelesaikan ini dengan :edit!
. Namun dalam Vim 7.3, itu tidak membuang sejarah undo.
Apakah ada cara lain untuk melakukan ini, selain dari menutup file?
git checkout -f file
atauhg rollback file
?u
untuk membatalkan perubahan individu, tetapi tidak melewati titik di mana saya terakhir berkomitmen. Persis seperti, setiap kali saya berkomitmen, saya menutup file dan membukanya kembali. Yang:edit!
biasa dilakukan - rasanya seperti menutup file dan membukanya kembali. Ini TIDAK HARUS terikat pada titik komit, itu hanya saat ketika saya paling sering menginginkannya.Jawaban:
harus melakukan apa yang Anda minta.
sumber
Yang lama: edit! perilaku dalam satu baris:
sumber
:h :exe
,:h :bar
,:h :set-args
,:h 'ul'
dan:h :edit!
.Fungsi Benoit tidak berfungsi untuk saya, tetapi saya menemukan sesuatu yang serupa dalam manual vim, di sini:
http://www.polarhome.com/vim/manual/v73/undo.html#undo-remarks
Saya menamparnya menjadi fungsi, ditambahkan ke vimrc saya dan tampaknya berfungsi dengan baik pada vim 7.3:
Ini dapat digunakan dengan
:ClearUndo
.sumber
Mungkin:
(
'ul'
alias untuk'undolevels'
).sumber
:edit!
. Sebagai permulaan, saya telah membuat fungsi yang disebut ClearUndos () dengan perintah yang Anda daftarkan, tetapi memanggilnya tampaknya tidak melakukan apa-apa, sedangkan melakukan perintah secara individual tidak ...:command -nargs=0 Reset let old_ul=&ul | set ul=-1 | e! | let &ul = old_ul | unlet old_ul
|
ke konten perintah. Kemudian buat fungsi yang melakukan apa yang saya katakan dalam jawaban saya, dan atur perintah kecall thefunction()
."Hapus riwayat undo (: w untuk menghapus file undo jika disajikan)
command! -bar UndoClear exe "set ul=-1 | m-1 | let &ul=" . &ul
m-1
, yang tidak benar-benar mengubah teks Anda.'undofile'
aktif,:w
untuk menghapus file undo, atau rantai sukaUndoClear|w
.sumber
Dalam naskah:
Kemudian gunakan
:Reset
untuk menyebutnya.sumber
set ul=
perintah hanya memengaruhi variabel lokal sampai skrip keluar, dan karena kita mengubahnya kembali sebelum skrip keluar, tidak pernah memengaruhi lingkungan? Apakah Anda menguji fungsi ini dan membuatnya berfungsi - artinya, apakah ada yang aneh dengan pengaturan saya?