Mengapa Vim menyimpan file dengan ekstensi ~?

180

Saya telah menemukan bahwa saat menggunakan Vim di Windows Vim menyimpan file, .ext.swpfile yang dihapus saat menutup jendela Vim dan .ext~file.

Saya berasumsi .ext.swpfile tersebut adalah cadangan sesi jika Vim crash. Apa tujuan dari .ext~file tersebut? Apakah ini file cadangan permanen? Ini menjengkelkan karena saya ingin menyalin semua file yang saya kerjakan ke host saya, tanpa duplikat ini. Bagaimana saya bisa mematikan ini atau , jika ada untuk alasan yang baik, sembunyikan file ?

Ross
sumber
Apakah Anda memiliki file yang terbuka secara bersamaan di lebih dari satu tempat, mereka akan membuat file .ext.swp.
dirkgently
2
dirkgently: Tidak, di sini saya dapat membuka file di satu-satunya jendela vim dan itu akan membuat file .swp. Saya tidak terlalu repot tentang itu karena dihapus ketika saya menyimpan / menutup jendela.
Ross

Jawaban:

221

The *.ext~file adalah file backup, yang berisi file seperti sebelum Anda mengeditnya.

The *.ext.swpfile swap file, yang berfungsi sebagai file kunci dan berisi sejarah undo / redo serta info internal yang kebutuhan lainnya Vim. Jika terjadi kerusakan, Anda dapat membuka kembali file Anda dan Vim akan mengembalikan status sebelumnya dari file swap (yang menurut saya sangat membantu, jadi saya tidak mematikannya).

Untuk menonaktifkan pembuatan otomatis file cadangan, gunakan (dalam vimrc Anda):

set nobackup
set nowritebackup

Di mana nowritebackupperubahan perilaku "save" default Vim, yaitu:

  1. tulis buffer ke file baru
  2. hapus file asli
  3. ganti nama file baru

dan membuat Vim menulis buffer ke file asli (mengakibatkan risiko menghancurkannya jika terjadi kesalahan I / O). Tetapi Anda mencegah "melompati file" pada desktop Windows dengan itu, yang merupakan alasan utama bagi saya untuk memiliki nowritebackupdi tempat.

Tomalak
sumber
7
+1 untuk you prevent "jumping files" on the Windows desktop. Cari di Google dan temukan jawaban ini
Merlyn Morgan-Graham
1
Sebenarnya - apakah saya harus memiliki keduanya nobackupdan nowritebackup? Apakah ada cara untuk menulis salinan file sebagai cadangan, tetapi tidak melakukan hal-hal ini menulis / menghapus / mengganti nama?
Merlyn Morgan-Graham
@Merlyn: Jika Anda memiliki backup(sebagai lawan dari nobackup), maka Vim akan membuat cadangan ( *.ext~file). Ini sama sekali tidak berhubungan dengan nowritebackup.
Tomalak
6
Ada meja menggambarkan perilaku yang berbeda antara kombinasi dari mereka switch: help backup-table. Ternyata pengaturan tidak nobackupatau tidak nowritebackup, tetapi pengaturan backupcopy=yesjuga menyelesaikan masalah "melompat". Ini bisa melukai perf, jadi untuk masing-masing mereka
Merlyn Morgan-Graham
27
Alih-alih mematikan, cadangan ke direktori set backupdir=~/.vim/backupdi .vimrc atau _vimrc di windows
tsukimi
224

Saya pikir solusi yang lebih baik adalah menempatkan baris-baris ini di file vimrc Anda

set backupdir=~/vimtmp//,.
set directory=~/vimtmp//,.

Baris pertama untuk file cadangan, baris kedua untuk file swap. Slash ganda pada akhirnya memastikan bahwa tidak ada konflik dalam hal dua file memiliki nama yang sama, lihat komentar (pada saat edit ini opsi ini hanya diberikan untuk file swap, belum untuk file cadangan ). The ,.memungkinkan vimuntuk menggunakan direktori saat ini jika mantan tidak ada.

Anda harus membuat direktori di direktori home Anda bernama vimtmp agar ini berfungsi. Juga, periksa apakah cadangan diaktifkan di konfigurasi Anda (tambahkan set backupjika tidak).

Dengan cara itu Anda mendapatkan manfaat dari kedua dunia, Anda tidak harus melihat file, tetapi jika ada sesuatu yang sia-sia Anda bisa mendapatkan file cadangan Anda dari vimtmp. Jangan lupa untuk membersihkan direktori keluar sesekali.

pengguna183135
sumber
22
+1 Saya benar-benar sudah punya set ke ~ / .vim / tmp, tapi bagaimanapun, ini telah menyelamatkan pantat saya di lebih dari satu kesempatan.
JC Yamokoski
11
Apa yang kamu butuhkan ,. di akhir setiap baris?
shin
9
@shin Vim akan menggunakan direktori pertama yang tersedia, jadi dalam kasus ini jika ~ / vimtmp tidak ada, ia akan menggunakan direktori kerja saat ini
xixixao
3
@SalmanPK Dalam dunia yang ideal Anda tidak boleh mengedit file konfigurasi secara langsung di server yang dapat diakses publik
Score_Under
12
Gunakan dua garis miring di ujung jalan. Misalnya, set backupdir = ~ / .vim / .backup // - the "//" di akhir direktori berarti bahwa nama file akan dibangun dari path lengkap ke file dengan semua pemisah path diganti dengan persen "% "tanda. Ini akan memastikan keunikan nama file di direktori preservasi.
Hacknightly
25

Untuk mematikan file-file itu, cukup tambahkan baris ini ke .vimrc (file konfigurasi vim pada OS berbasis unix):

set nobackup       #no backup files
set nowritebackup  #only in case you don't want a backup file while editing
set noswapfile     #no swap files
rogeriopvl
sumber
12
:set nobackup 

akan mematikan cadangan. Anda juga dapat mengatur backupdir jika Anda masih menginginkan file cadangan tersebut tetapi di folder pusat. Dengan cara ini direktori kerja Anda tidak dikotori ~ file.

Anda menemukan informasi lebih lanjut tentang cadangan di bawah : cadangan .

f3lix
sumber
12

Dan Anda juga dapat mengatur ekstensi cadangan yang berbeda dan tempat untuk menyimpan cadangan tersebut (saya lebih suka ~/.vimbackupsdi linux). Saya dulu menggunakan cadangan "versi", melalui:

au BufWritePre * let &bex = '-' . strftime("%Y%m%d-%H%M%S") . '.vimbackup'

Ini menetapkan ekstensi cadangan dinamis ( ORIGINALFILENAME-YYYYMMDD-HHMMSS.vimbackup).

Zsolt Botykai
sumber
3
Anda mungkin ingin menyertakan bagaimana mengatur kembali direktori, yaitu menempatkan set backupdir=~/.vimbackupsdi ~ / .vimrc
rampion
1
Bantuan vim sepenuhnya menggambarkan teknik ini. Lihat:help backupext
netjeff
8

Masukkan baris ini ke Anda vimrc:

set nobk nowb noswf noudf " nobackup nowritebackup noswapfile noundofile


Di itu akan menjadi:

C:\Program Files (x86)\vim\_vimrc

file untuk konfigurasi vim seluruh sistem untuk semua pengguna.

Pengaturan yang terakhir noundofilepenting di Windows untuk mencegah pembuatan *~file tilda setelah diedit.


Saya berharap Vim memiliki garis yang disertakan secara default. Tidak ada yang suka direktori jelek.

Biarkan pengguna memilih jika dan bagaimana dia ingin mengaktifkan fitur file cadangan / undo terlebih dahulu.

Ini adalah bagian yang paling menyebalkan dari Vim.

Langkah selanjutnya mungkin mengatur:

set noeb vb t_vb= " errorbells visualbell

untuk menonaktifkan bip dalam demikian juga :-)


sumber
Terima kasih banyak atas ini! "noundofile" adalah pilihan yang akhirnya menyingkirkan sampah yang mengerikan itu. (Dan saya setuju 100% dengan semua yang Anda tulis di pos Anda!)
pwmusic
6

Anda benar bahwa .swpfile tersebut digunakan oleh vim untuk mengunci dan sebagai file pemulihan.

Coba set nobackupmasukkan vimrc Anda jika Anda tidak ingin file-file ini. Lihat Vim docs untuk berbagai opsi terkait cadangan jika Anda menginginkan keseluruhan, atau ingin memiliki file .bak sebagai gantinya ...

dwc
sumber
+1 untuk menyebutkan tujuan sebagai file kunci. Saya tidak memikirkan itu.
Tomalak
5

Satu-satunya opsi yang berhasil bagi saya adalah meletakkan baris ini di file ~ / .vimrc saya

atur noundofile

Opsi lain yang merujuk ke file cadangan tidak mencegah pembuatan file temp berakhir dengan ~ (tilde)

Logan
sumber
Ini akhirnya berhasil untuk saya. Mengapa ini tidak disebutkan dalam jawaban lain? Ini menghapus: .<filename>.un~file sementara opsi lain hanya menghapus <filename>~file.
JLT
0

Saya harus menambahkan set noundofileke ~ _gvimrc

Direktori "~" dapat diidentifikasi dengan mengubah direktori dengan cd ~perintah

Josh
sumber