Ketika kita mengedit file, kita biasanya melakukan banyak UNDO berturut-turut, katakanlah, 20 kali. Dalam VIM, itu biasanya dilakukan dengan menekan u
20 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 change
tanpa 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 change
dalam sejarah).
EDIT
Mencoba menjadi lebih jelas: Saya memiliki fungsi FF
yang memperbarui baris terakhir file ketika buffer ditulis. Jadi, jika saya melakukan 20 undos + write
, yang terakhir write
membuka cabang undo baru. Saya mencoba menambahkan undojoin
di 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 vim
sebagai gantinya, tetapi karena saya menggunakan ini melalui SSH
saya 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>R
Anda mendapatkan 4
. Ini terjadi bahkan jika Anda melakukan :w
setelah masing-masing <CTRL>R
. Namun, jika setiap kali Anda melakukan :w
Anda menjalankan fungsinya melalui BufWritePre
, <CTRL>R
tidak akan menulis 3
kembali. 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 sayavi
perintah undo membatalkan sekali, dan kemudian ketika Anda menekanu
lagi membatalkan undo ("redo"). Itu nyata vi. Jadi saya dan pengguna lain dari situs ini mungkin tidak tahu jawaban atas pertanyaan Anda.