Secara default, vim
meninggalkan file swap di direktori proyek saya, dan pada crash itu meninggalkan file cadangan.
Bisakah saya mencegah ini? Atau apakah saya perlu memperbarui .VCSignore
file semua proyek saya ?
Secara default, vim
meninggalkan file swap di direktori proyek saya, dan pada crash itu meninggalkan file cadangan.
Bisakah saya mencegah ini? Atau apakah saya perlu memperbarui .VCSignore
file semua proyek saya ?
Jawaban:
Secara default, Vim tidak meninggalkan file cadangan. Mereka hanyalah file sementara yang ada saat Vim menyimpan buffer ke disk. Seperti yang dijelaskan dalam :help backup-table
perilaku ini dapat dikontrol oleh 'backup'
dan 'writebackup'
opsi:
'backup' 'writebackup' action ~
off off no backup made
off on backup current file, deleted afterwards (default)
on off delete old backup, backup current file
on on delete old backup, backup current file
Sedangkan untuk swap file, dapat berguna untuk mengumpulkannya di direktori khusus. Ini bisa dilakukan dengan 'directory'
opsi. Sebagai contoh
:set directory^=$HOME/.vim/tmp//
akan menambah $HOME/.vim/tmp
ke kepala daftar direktori yang akan coba digunakan Vim saat membuat file swap. Trailing //
membuat Vim menyandikan seluruh nama jalur ke file sehingga tidak ada tabrakan dengan file yang bernama sama dari direktori yang berbeda.
Peringatan : Ini secara efektif menonaktifkan kemampuan Vim untuk memperhatikan jika banyak pengguna mencoba mengedit file yang sama karena file swap disimpan di lokasi yang berbeda.
Cuplikan di bawah ini (diadaptasi dari vimrc tpope ) juga akan menonaktifkan file swap untuk buffer ketika tidak dimodifikasi, dengan cara itu jika Vim / komputer Anda crash ketika Anda memiliki banyak file terbuka, file swap yang tertinggal hanya akan menjadi untuk file yang dimodifikasi.
autocmd CursorHold,BufWritePost,BufReadPost,BufLeave *
\ if isdirectory(expand("<amatch>:h")) | let &swapfile = &modified | endif
Peringatan : Karena file swap hanya ada ketika buffer diubah, ini memiliki efek yang sama seperti pengaturan 'directory'
. Jika buffer tidak dimodifikasi, maka Vim lain dapat mulai mengeditnya tanpa pemberitahuan. Jika Vim kedua disimpan sebelum yang pertama membuat lebih banyak perubahan, maka mereka tidak akan diketahui sampai pengguna mencoba untuk menyimpan atau sesuatu memicu Vim untuk memeriksa apakah file tersebut dimodifikasi.
Saya menggunakan saya .vimrc
di beberapa mesin, termasuk server bersama. Saya tidak selalu ingin orang dapat melihat file yang sedang saya kerjakan dan saya suka menjaga direktori home saya relatif bersih. Jadi ini solusi saya yang akan bekerja di Linux dan Mac OS X.
" Sets central temp file location, to prevent local default behavior.
if isdirectory($HOME . '/.vim/.tmp') == 0
:silent !mkdir -m 700 -p ~/.vim/.tmp > /dev/null 2>&1
endif
set backupdir=~/.vim/.tmp ",~/.local/tmp/vim,/var/tmp,/tmp,
set directory=~/.vim/.tmp ",~/.local/tmp/vim,/var/tmp,/tmp,
Perhatikan bahwa ini akan membuat .tmp
direktori di bawah ~/.vim
jika belum ada. Ini akan menjadi rumah baru dari file swap Anda. Untuk file undo, saya juga memiliki yang berikut di .vimrc
(yang sangat mirip):
if exists("+undofile")
" undofile -- This allows you to use undos after exiting and
" restarting. NOTE: only present in 7.3+
" :help undo-persistence
if isdirectory( $HOME . '/.vim/.undo' ) == 0
:silent !mkdir -m 700 -p ~/.vim/.undo > /dev/null 2>&1
endif
set undodir=~/.vim/.undo
set undofile
endif
Inilah yang saya lakukan di vimrc saya:
fun! MkdirIfNeeded(dir, flags, permissions)
if !isdirectory(a:dir)
call mkdir(a:dir, a:flags, a:permissions)
endif
endfun
" Set (& create if needed) a temp directory to keep backup & swap files
if has('win32')
let whoami = substitute(system("whoami /LOGONID"), '\n', '', '')
let tmpdir = 'C:/tmp/vim_' . whoami
else
let whoami = substitute(system("whoami"), '\n', '', '')
let tmpdir = '/var/tmp/vim_' . whoami
endif
call MkdirIfNeeded(tmpdir, 'p', 0700)
let &backupdir = tmpdir
let &dir = tmpdir
let &undodir = tmpdir
Ini akan membuat /var/tmp/vim_<username>
, dan menggunakan ini untuk menyimpan semua file terkait vim. Menjaga direktori proyek Anda bersih.
Menggunakan whoami
memastikan Anda dapat menggunakan vimrc secara global (mis. Untuk pengguna & root) saat masih menggunakan direktori terpisah; jika Anda tidak membutuhkan ini, Anda bisa menggantinya dengan direktori kode keras untuk memulai lebih cepat. Anda juga dapat menggunakan ~/.vim/
direktori, tetapi saya suka menggunakannya /var/tmp
karena biasanya sistem file terpisah.
Saya menggunakan /var/tmp
karena /tmp
sering dihapus saat reboot. Anda mungkin tidak ingin direktori ini dapat ditulis oleh dunia, karena orang kemudian dapat menempatkan file di sana untuk melakukan hal-hal yang berpotensi berbahaya ketika Anda membuka file.
adduser
atau apa pun yang Anda gunakan untuk membuat pengguna. Bagaimanapun, kebanyakan orang menggunakan Vim pada mesin tepercaya (tetapi komentar Anda bagus, seperti itu).
$HOME
suatu tempat.
/var/
adalah sistem file yang berbeda. Teorinya adalah, hal itu akan mencegah banyak penulisan pada /
,, /usr
atau /home
, yang mengarah pada fragmentasi & risiko korupsi file yang lebih kecil jika terjadi kerusakan ... Ini juga mengapa kotak surat dan barang-barang aktif /var
secara default, dan bukan di homedir ...
/var/tmp
selalu dapat ditulis oleh dunia — ini adalah direktori temp sistem. (Yah, Anda bisa mengubahnya menjadi tidak, tapi itu salah satu hal di mana sistem Unix seperti senang membiarkan Anda menyimpan potongan setelah Anda memecahkannya). Jika Anda memiliki pengguna lain di sistem, ia dapat membuatnya/var/tmp/vim_«your_username»
dengan izin pilihannya. Dan kemudian mengisinya dengan symlink ke file penting Anda, yang mungkin akan dihancurkan oleh vim tempfiles.