Ketika kita mengedit file, kita biasanya melakukan banyak UNDO berturut-turut, katakanlah, 20 kali. Dalam VIM, itu biasanya dilakukan dengan menekan u20 kali, dan itu membuat VIM naik "ke atas" di tumpukan sejarah 20 posisi. Jika Anda kemudian memastikan change, semua 20 perintah sejarah terakhir hilang, dan digantikan oleh change. Saya ingin membuatnya changetanpa kehilangan 20 posisi itu. Jadi saya kira saya ingin memberitahu VIM untuk berhenti merekam riwayat sebelum saya melakukannya change, dan melanjutkan riwayat sesudahnya (tidak ingin changedalam sejarah).
EDIT
Mencoba menjadi lebih jelas: Saya memiliki fungsi FFyang memperbarui baris terakhir file ketika buffer ditulis. Jadi, jika saya melakukan 20 undos + write, yang terakhir writemembuka cabang undo baru. Saya mencoba menambahkan undojoindi dalam FF(mencoba mengikuti saran oleh jlmg di bawah), tetapi urutan write-undo-write memberikan kesalahan: undojoint tidak diizinkan setelah membatalkan . Saya malah bisa melakukan beberapa sed ....setelah meninggalkan vimsebagai gantinya, tetapi karena saya menggunakan ini melalui SSHsaya lebih suka solusi vim-only (jalankan perintah setelah membongkar buffer tidak menulis ke file).
EDIT 2 Coba lakukan ini di VIM: buka file kosong, dan lakukan:
i1<ESC>:wa2<ESC>:wa3<ESC>:wa4<ESC>uu:w
Jika sekarang Anda melakukan <CTRL>R, VIM akan menulis '3' kembali, selanjutnya <CTRL>RAnda mendapatkan 4. Ini terjadi bahkan jika Anda melakukan :wsetelah masing-masing <CTRL>R. Namun, jika setiap kali Anda melakukan :wAnda menjalankan fungsinya melalui BufWritePre, <CTRL>Rtidak akan menulis 3kembali. Dan inilah yang ingin saya lakukan, itu sebabnya saya menulis untuk 'menunda hisotry', tapi mungkin yang saya minta tidak mungkin, selain bekerja dengan penuh undotree().
vim.se, saya akan mencobanya. Ngomong-ngomong, sepertinya Sato tahu bagaimana membantu.
sed, tetapi sed tidak dapat melakukan undo Anda, jadi bagaimana cara kerjanya? Jika Anda dapat "menangguhkan sejarah", perilaku seperti apa yang Anda harapkan dari vim ketika Anda melakukan undo sesudahnya? Satu-satunya perilaku yang dapat saya visualisasikan adalah mengelompokkan perubahan tersebut (bersama dengan undo) dalam satu blok undo, maka jawaban saya. Tapi kalau bukan itu, apa?
vi, tetapi bagi sayaviperintah undo membatalkan sekali, dan kemudian ketika Anda menekanulagi membatalkan undo ("redo"). Itu nyata vi. Jadi saya dan pengguna lain dari situs ini mungkin tidak tahu jawaban atas pertanyaan Anda.