Saya telah menggunakan fitur undofile di Vim untuk sementara waktu sekarang. Ini fitur yang sangat bagus.
Namun, satu gangguan adalah sangat mudah untuk secara tidak sengaja membatalkan perubahan yang saya lakukan terakhir kali saya membuka file; yang mungkin 2 menit yang lalu, satu jam yang lalu, minggu lalu, atau sebulan yang lalu.
Sebagai contoh, katakanlah saya membuka file, membuat beberapa perubahan, mematikan dan mengubah beberapa file lainnya, dan menemukan bahwa perubahan saya tidak diperlukan, atau mungkin itu hanya beberapa pernyataan debug sementara.
Sebelumnya, saya hanya bisa memegang ukunci sampai Vim berkata "Sudah pada perubahan tertua" :wq
,, dan selesai. Tapi sekarang saya harus sangat berhati-hati untuk tidak membatalkan perubahan yang saya lakukan terakhir kali saya membuka file. Tidak ada cara yang jelas untuk melihat ketika Anda melakukan ini.
Apakah ada cara untuk membuatnya lebih eksplisit? Misalnya dengan menunjukkannya di suatu tempat, mengeluarkan peringatan, atau bahkan meminta konfirmasi.
sumber
Jawaban:
Saya punya masalah persis ini. Inilah yang saya tambahkan ke vimrc saya untuk memperbaikinya untuk saya:
Perhatikan bahwa Anda tidak mengatur
undofile
opsi; Anda perlu menghapus dari vimrc Anda jika Anda memilikinya.Undo sekarang berfungsi sebagai "normal". Tapi kita jangan secara manual menulis ke file undo dengan
wundo
perintah diBufWritePost
.The
ReadUndo()
fungsi manual membaca file undo denganrundo
dan menetapkanundofile
pilihan. Sekarang kita bisa menggunakan uuntuk kembali ke sejarah. Saya memetakan ini ke<Leader>u
.Ini mungkin bisa lebih baik. Ini menimpa info undo sebelumnya, jadi Anda tidak bisa kembali ke waktu sebelumnya sebelumnya Anda mengedit file. Tetapi saya sendiri tidak membutuhkannya.
sumber
Oooh, ooh, akhirnya kesempatan untuk memamerkan perintah bagus ini !
Vim dapat "kembali ke masa lalu." Ini memiliki
:earlier
perintah ...... yang dapat mengembalikan file kembali ke keadaan sebelumnya. Ini dapat digunakan dalam beberapa cara.
Jika Anda dapat membuat perkiraan rata-rata tentang berapa lama Anda melakukan perubahan ini, Anda dapat memberi waktu pada perintah ini. Atau, misalnya, jika Anda tahu Anda belum mengubah file (kecuali untuk perubahan yang ingin Anda batalkan) pada hari terakhir, Anda dapat menggunakan
Jika Anda hanya menulis (menyimpan) file satu kali sejak perubahan yang ingin Anda batalkan, atau Anda belum menyimpan file sama sekali, Anda dapat menggunakan
Seperti dijelaskan dalam
:help
teks, ini akan kembali ke versi yang ditulis sebelumnya jika Anda baru saja menulis file, atau kembali ke waktu terakhir disimpan jika Anda tidak memiliki perubahan yang disimpan.Ini tidak menjawab pertanyaan Anda dengan tepat, tetapi kedengarannya seperti masalah XY.
sumber
u
, dan saya secara tidak sengaja melewati perubahan yang saya buat sekarang ... Saya tidak yakin apa yang sebenarnya "masalah-X" bisa berada di sini?:earlier
-ngomong, sekarang aku akan melakukannya, tetapi aku masih harus menebak ; sama seperti saya perlu menebak ketika menggunakanu
... Dalam kasus ini mungkin sedikit lebih baik, tapi saya lebih suka sesuatu yang lebih eksplisit (jika mungkin).:ea 5d
. Anda juga bisa menggunakan:ea 1f
pendekatan tersebut. Bagaimanapun, itu jauh kurang granular.Pembaruan 2015-06-28 : Saya memperbaiki bug kecil, dan merilis ini sebagai plugin . Kode plugin sedikit lebih baik, karena memperingatkan lagi setelah memindahkan kursor; Saya sarankan Anda menggunakan plugin.
Jawaban dari superjer bekerja dengan sangat baik, tetapi memiliki efek samping yang disayangkan bahwa Anda hanya dapat membatalkan perubahan dari sesi Vim terakhir, dan tidak semua sesi Vim sebelumnya.
Ini karena
wundo
menimpa file undo; itu tidak digabung. Sejauh yang saya tahu, tidak ada cara untuk memperbaikinya.Jadi inilah solusi alternatif saya, itu akan menampilkan pesan peringatan merah besar ketika Anda membatalkan perubahan dari file undo.
Ini mirip dengan jawaban Ingo Karkat , tetapi tidak memerlukan plugin eksternal dan memiliki beberapa perbedaan halus (menampilkan peringatan alih-alih bunyi bip, tidak mengharuskan Anda menekan
u
dua kali).Catatan ini hanya memodifikasi satu
u
dan<C-r>
mengikat, dan tidak denganU
,:undo
, dan:redo
perintah.sumber
Saya memiliki yang berikut, yang berhenti dan berbunyi bip saat membatalkan mencapai konten buffer yang bertahan.
Ini terintegrasi dengan plugin repeat.vim; itu membutuhkan plugin ingo-library saya .
sumber
Saya sangat menyukai ide yang dikutip sehingga saya membuat
:Revert
perintah. Saya harap Anda akan menemukan itu relevan dengan pertanyaan Anda.Fungsi pembantu
Get_seq
danReal_seq
, berdasarkan undotree , diperlukan karenaundotree()['seq_cur']
kadang-kadang tidak cukup untuk menentukan posisi saat ini di pohon dibatalkan . Anda dapat membaca lebih lanjut di sini .sumber
au
. yang vimrc di sana adalah pelakunya. Biarkan saja