Apakah Vim disimpan otomatis?

13

Dari :help swap-file:

Memperbarui swapfile

File swap diperbarui setelah mengetik 200 karakter atau ketika Anda belum mengetik apa pun selama empat detik. Ini hanya terjadi jika buffer diubah, bukan ketika Anda hanya bergerak. Alasan mengapa ini tidak selalu diperbarui adalah karena ini akan memperlambat kerja normal terlalu banyak. Anda dapat mengubah jumlah 200 karakter dengan opsi 'updatecount'. Anda dapat mengatur waktu dengan opsi 'updatetime'. Waktu diberikan dalam milidetik. Setelah menulis ke file swap, Vim menyinkronkan file ke disk. Ini membutuhkan waktu, terutama pada sistem Unix yang sibuk. Jika Anda tidak menginginkan ini, Anda dapat mengatur opsi 'swapsync' ke string kosong. Risiko kehilangan pekerjaan menjadi lebih besar. Pada beberapa sistem non-Unix (MS-DOS, Amiga) file swap tidak akan ditulis sama sekali.

Dari sini saya punya beberapa pertanyaan:

  1. Apakah ini berarti Vim autosave pekerjaan Anda dari waktu ke waktu?

  2. "Setelah menulis ke file swap, Vim menyinkronkan file ke disk." Apa artinya ini? Apakah ini merujuk pada file yang ditulis pertama ke memori dan kemudian ke disk atau itu sesuatu yang lain?

  3. Katakanlah saya membuat catatan kelas: Saya menulis cepat dan ada sedikit kebutuhan bagi saya untuk meninggalkan mode Sisipkan. Tetapi berkali-kali saya berubah menjadi Normal hanya untuk menyelamatkan pekerjaan saya. Apakah saya perlu melakukan ini atau apakah Vim memastikan bahwa sebagian besar pekerjaan saya disimpan walaupun saya tidak meninggalkan mode Sisipkan?

Gonçalo Ribeiro
sumber

Jawaban:

9
  1. Ya itu menyimpan untuk menukar file.

Anda dapat melakukan tes cepat untuk merasakan ini. Pergi ke direktori. Ucapkan vim notest.txtdan tulis beberapa teks. Anda bahkan tidak perlu menyimpan file.

Jika Anda mencantumkan file di direktori kerja Anda akan menemukan file swap. Salin ke direktori yang berbeda (di mana Anda tidak memiliki file "notes.txt", misalnya vim notest.txt.

Anda mendapatkan catatan tentang swap yang ada, sedang dimodifikasi, dan opsi terbuka hanya baca, pulihkan dll. Pilih pulihkan dan voila! "Salinan" file Anda.

  1. Ya, swap disimpan dalam memori.

Ketika Vim membaca file itu menambahkannya ke RAM. Baik untuk yang sudah ada maupun yang baru (file yang masih belum disimpan). Saat swap disimpan, flush ke disk. HDD. Dari RAM.

  1. Iya dan tidak.

Dengan pengaturan default, sebagian besar pekerjaan Anda disimpan. Itu untuk setiap 200 karakter yang dimasukkan, atau ketika Anda memiliki jeda 4 detik. Meskipun saya percaya file swap akan disimpan, saya suka menyimpan pekerjaan saya ketika saya tahu saya berada di sistem yang tidak stabil. Tetapi, yang mengatakan, seseorang cukup yakin untuk tetap bekerja kecuali seseorang harus sangat sial dan sistem hosting menjadi panik setelah menulis kalimat yang sangat penting.

Singkatnya sudah cukup untuk menabung saat kuliah selesai. Jika sistem harus berhenti untuk alasan apa pun di tengah-tengah kelas, pekerjaan sampai di swap.

Tentu saja: Jika Anda sangat sial, crash dapat terjadi saat file swap sedang ditulis. Akibatnya file swap bisa rusak. Belum pernah mengalami ini, dan tidak yakin bagian mana dari file yang mungkin kacau, tetapi mungkin patut dipikirkan. Karena file swap adalah biner (tidak memiliki kata yang lebih baik), tampaknya alasannya lebih rapuh daripada file teks biasa.


Sebagai catatan tambahan. Setidaknya ketika menggunakan direktori kerja untuk swap, file swap adalah lokasi agnostik ketika datang ke pemulihan. Dengan demikian, Anda dapat menyalin file swap ke lokasi baru dan memulihkan file tersebut sebagai file baru . Hanya perhatikan bahwa nama file dikodekan ke dalam swap. Karena itu Anda tidak dapat mengatakan:

cp .foo.txt.swp .bar.txt.swp

dan

vim bar.txt

dan mengharapkan file swap dari foo.txt.

Jika Anda sangat tertarik, Anda dapat melakukannya (pada * nix):

xxd -s 108 -l 800 -ps .foo.txt.swp | xxd -r -p

untuk mendapatkan path (dengan beberapa kebiasaan) file asli. Ketika Anda akan melihat path lengkap ditambahkan, misalnya:

~user/blah/blah/notes.txt

tetapi hanya nama dasarnya yang digunakan pada cek swap.

Dalam hal ini Anda juga dapat memeriksa vim -ropsi - yang mencantumkan file swap di direktori saat ini dan yang lebih rendah. Lihat :h crash-recoverydengan sub-topik.

Runium
sumber
0

Bagi saya tidak masalah untuk menyimpan buffer setiap kali teks diubah:

autocmd TextChanged,TextChangedI <buffer> silent write

Saya menemukannya di sini . Ini bekerja untuk saya.

simhumileco
sumber