Bagaimana mencegah vim membuat (dan meninggalkan) file sementara?

163

Mengapa vim membuat <filename>~file? Apakah ada cara untuk menonaktifkannya?

Jika itu untuk cadangan (atau sesuatu), saya menggunakan git untuk itu.

Juga, .<filename.with.path.hints>.swpfile - file ini juga.

Bagaimana saya memberi tahu vim untuk tidak membuat itu, atau setidaknya untuk membersihkan sendiri?

EDIT

whoops, duplikat:

Mengapa Vim menyimpan file dengan ekstensi ~?

Saya mengadopsi jawaban rogeriopvl dari sana.

salinan kata demi kata:

set nobackup       "no backup files
set nowritebackup  "only in case you don't want a backup file while editing
set noswapfile     "no swap files
Hasen
sumber
12
Git tidak akan pernah membantu Anda memulihkan pekerjaan setelah sistem crash. Git juga dapat mengabaikan file * .swp Anda. = D
vmassuchetto
3
Kemungkinan duplikat Mengapa Vim menyimpan file dengan ekstensi ~?
törzsmókus
lol apakah seseorang dengan serius menandai pertanyaan ini sebagai duplikat setelah enam tahun mempostingnya?
Hasen

Jawaban:

78

Saya sangat merekomendasikan untuk tetap bekerja dengan swap file (kalau-kalau Vim crash).

Anda dapat mengatur direktori tempat file swap disimpan, sehingga mereka tidak mengacaukan direktori normal Anda:

set swapfile
set dir=~/tmp

Lihat juga

:help swap-file
pengguna55400
sumber
4
baik, saya tidak pernah membutuhkannya dengan notepad ++, kecuali jika Anda mengatakan bahwa vim akan crash terlalu sering!
Hasen
8
tidak, saya tidak menyiratkan bahwa vim crash terlalu sering (meskipun saya pernah melihatnya crash). Tetapi untuk lingkungan kerja saya, koneksi jaringan ke beberapa host yang saya kerjakan cukup tidak stabil, sehingga terjadi pengeditan yang terputus. Tukar file membantu di sana.
user55400
9
@ user55400 pernah mendengar tentang GNU / Layar? (atau tmux, atau alternatif Jepang ini)
Elazar Leibovich
Saya menambahkan ini ke file _vimrc saya di Windows, dan saya masih mendapatkan file ~ file. Apakah saya tidak melakukan sesuatu dengan benar?
FilBot3
2
@noircc Saya akan menyarankan agar tidak menggunakan / tmp. Jika seluruh sistem macet dan Anda harus reboot, swapfile Anda akan hilang.
56

Masukkan ini ke dalam file konfigurasi .vimrc Anda.

set nobackup
Chad Birch
sumber
5
Kami telah melakukan ini pada Windows 8.1 dengan Vim. File swap masih ada.
Shaun Luttin
1
Shaun, Anda mungkin perlu menambahkan "set noswapfile" ke .vimrc Anda juga untuk mencegah file swap baru dibuat, seperti yang disebutkan dalam edit ke pertanyaan awal.
Earl Zedd
Bagaimana dengan :duduk sebagai awalan sebelum setkata kunci? Apakah itu wajib? Itu tidak terlihat seperti komentar ..
Stephane
@Stephane :awalan berarti ini dilakukan dalam mode perintah, tetapi Anda tidak perlu :ketika menulis vimrc Anda
TankorSmash
Itu bukan ide yang bagus. Di atas membiarkan file-file ini duduk di temp / folder sudah jauh lebih baik.
MonsieurMan
36

; Untuk Pengguna Windows untuk kembali ke direktori temp

set backup
set backupdir=C:\WINDOWS\Temp
set backupskip=C:\WINDOWS\Temp\*
set directory=C:\WINDOWS\Temp
set writebackup
Sooraj
sumber
6
Saya harus menambahkan set undodir = C: \ WINDOWS \ Temp
Ini tidak berhasil untuk saya - saya harus menggunakan set dir = $ TEMP sebagai gantinya
Frank Schmitt
10

Saya membuat plugin bernama "noswapsuck" yang hanya memungkinkan swapfile ketika buffer berisi perubahan yang belum disimpan. Setelah perubahan disimpan, swapfile dihapus. Karenanya, swapfile yang berisi konten yang sama dengan file pada disk akan dihapus.

Dapatkan disini: noswapsuck.vim

Ini telah bekerja dengan baik untuk saya, tetapi saya belum pernah mempublikasikannya, jadi saya akan menerima umpan balik.

Keuntungan:

  • Satu-satunya swapfile yang tersisa di disk Anda adalah swapfile penting yang sebenarnya berbeda dari file!

Kekurangan:

  • Jika buffer memiliki swapfile, itu tidak akan terdeteksi ketika file pertama kali dibuka. Itu hanya akan terdeteksi ketika swapfilediaktifkan, yaitu saat Anda mulai mengedit buffer. Itu sangat terlambat, dan akan mengganggu Anda. (Diselesaikan: Kami sekarang memeriksa swapfile yang sudah ada sebelumnya ketika buffer dibuka, dengan mengaktifkan kembali swapfileopsi untuk sementara ).

  • Jika Anda bekerja di lingkungan di mana Anda ingin meminimalkan penulisan disk (mis. Daya rendah, atau file yang dipasang di jaringan, atau mengedit file besar) maka tidak ideal untuk terus menghapus dan menciptakan kembali file swap pada setiap simpan dan edit. Dalam situasi seperti itu, Anda dapat melakukan:

    :let g:NoSwapSuck_CloseSwapfileOnWrite = 0
    

    yang akan menjaga swapfile setelah menulis, tetapi masih akan menghapusnya ketika buffer kehilangan fokus.

Ngomong-ngomong, saya punya plugin kecil lain :DiffAgainstFileOnDiskyang bisa sangat berguna setelah memukul (r)ecover, untuk memeriksa apakah buffer yang Anda pulihkan lebih baru atau lebih tua dari file yang ada, atau identik dengan itu.

joeytwiddle
sumber
8

Di Windows tambahkan baris berikut ke _vimrc

" store backup, undo, and swap files in temp directory
set directory=$HOME/temp//
set backupdir=$HOME/temp//
set undodir=$HOME/temp//
Vlad Bezden
sumber
5

Jawaban ini berlaku untuk menggunakan gVim pada Windows 10. Saya tidak dapat menjamin hasil yang sama untuk sistem operasi lain.

Menambahkan:

set nobackup
set noswapfile
set noundofile

Ke file _vimrc Anda.

Catatan: Ini adalah jawaban langsung untuk pertanyaan (untuk Windows 10) dan mungkin bukan hal yang paling aman untuk dilakukan (baca jawaban lain), tetapi ini adalah solusi tercepat dalam kasus saya.

wlwl2
sumber
0

Saya memiliki pengaturan ini di .vimrc Ubuntu saya. Saya tidak melihat file swap di file proyek saya.

set undofile
set undolevels=1000         " How many undos
set undoreload=10000        " number of lines to save for undo

set backup                        " enable backups
set swapfile                      " enable swaps
set undodir=$HOME/.vim/tmp/undo     " undo files
set backupdir=$HOME/.vim/tmp/backup " backups
set directory=$HOME/.vim/tmp/swap   " swap files

" Make those folders automatically if they don't already exist.
if !isdirectory(expand(&undodir))
    call mkdir(expand(&undodir), "p")
endif
if !isdirectory(expand(&backupdir))
    call mkdir(expand(&backupdir), "p")
endif
if !isdirectory(expand(&directory))
    call mkdir(expand(&directory), "p")
endif
Raza
sumber