Varsayılan olarak, vim
takas dosyalarını proje dizinimde bırakır ve çökmelerde yedekleme dosyaları bırakır.
Bunu önleyebilir miyim? Yoksa tüm projelerimin .VCSignore
dosyasını güncellemem gerekiyor mu?
Varsayılan olarak, vim
takas dosyalarını proje dizinimde bırakır ve çökmelerde yedekleme dosyaları bırakır.
Bunu önleyebilir miyim? Yoksa tüm projelerimin .VCSignore
dosyasını güncellemem gerekiyor mu?
Yanıtlar:
Varsayılan olarak Vim, yedekleme dosyalarını geride bırakmaz. Bunlar Vim arabelleği diske kaydederken var olan geçici dosyalardır. :help backup-table
Bu davranışta açıklandığı gibi 'backup'
ve 'writebackup'
seçenekleri ile kontrol edilebilir :
'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
Takas dosyalarına gelince, bunları özel bir dizinde toplamak yararlı olabilir. Bu 'directory'
seçenek ile yapılabilir . Örneğin
:set directory^=$HOME/.vim/tmp//
, $HOME/.vim/tmp
takas dosyası oluştururken Vim'in kullanmaya çalışacağı dizin listesinin başına ekleyecektir . Sondaki //
Vim farklı dizinlerden benzer adlandırılmış dosyaları ile çarpışmalar bulunmamaktadır yüzden dosyası için tüm yol adı kodlamak yapar.
Uyarı : Bu, takas dosyaları farklı konumlarda depolandığından Vim'in birden çok kullanıcının aynı dosyayı düzenlemeye çalıştığını fark etmesini etkin bir şekilde devre dışı bırakır.
Aşağıdaki snippet ( tpope'nun vimrc'sinden uyarlanmış ), değiştirilmediğinde bir arabellek için takas dosyasını da devre dışı bırakır, böylece Vim / bilgisayarınız bir grup dosya açıkken çökerse, geride bırakılan takas dosyaları yalnızca değiştirilmiş dosyalar için.
autocmd CursorHold,BufWritePost,BufReadPost,BufLeave *
\ if isdirectory(expand("<amatch>:h")) | let &swapfile = &modified | endif
Uyarı : Takas dosyası yalnızca arabellek değiştirildiğinde mevcut olduğundan, bu ayar ile benzer bir etkiye sahiptir 'directory'
. Arabellek değiştirilmezse, başka bir Vim bildirimde bulunmadan düzenlemeye başlayabilir. İkinci Vim, birincisi daha fazla değişiklik yapmadan önce kaydederse, kullanıcı kaydetmeye çalışana veya bir şey dosyanın değiştirilip değiştirilmediğini kontrol etmek için Vim'i tetikleyene kadar fark edilmez.
.vimrc
Paylaşılan sunucular da dahil olmak üzere birden çok makinede kullanıyorum . İnsanların üzerinde çalıştığım dosyaları görebilmelerini istemiyorum ve ana dizinimi nispeten temiz tutmayı seviyorum. İşte bu benim Linux ve Mac OS X üzerinde çalışacak olan çözümüm.
" 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,
Bunun zaten yoksa .tmp
altında bir dizin oluşturacağını unutmayın ~/.vim
. Bu, takas dosyalarınızın yeni evi olacaktır. Geri alma dosyaları için, benim de .vimrc
(ki oldukça benzer) aşağıdakiler var:
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
Benim vimrc yaptığım budur:
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
Bu yaratacak /var/tmp/vim_<username>
ve tüm vim ilgili dosyaları depolamak için kullanabilir. Proje dizininizi temiz tutmak.
Kullanma whoami
, vimrc'yi ayrı dizinler kullanırken global olarak (yani kullanıcı ve kök için) kullanabilmenizi sağlar; buna ihtiyacınız yoksa, daha hızlı başlatma için sabit kodlu bir dizinle değiştirebilirsiniz. ~/.vim/
Dizini de kullanabilirsiniz , ancak /var/tmp
genellikle ayrı bir dosya sistemi olduğu için kullanmayı seviyorum .
Kullandığım /var/tmp
çünkü /tmp
sık sık yeniden başlatma temizlenir. Muhtemelen bu dizini dünya çapında yazılabilir olarak istemezsiniz, çünkü insanlar bir dosyayı açtığınızda potansiyel olarak zararlı şeyler yapmak için dosyaları buraya yerleştirebilirler.
adduser
kullanıcı yapmak için veya kullandığınız her şeyi eklemek istersiniz . Her durumda, çoğu kişi Vim'i güvenilir makinelerde kullanır (ancak yorumunuz iyi bir şeydir).
$HOME
yere koymadığından emin değilim .
/var/
Farklı bir dosya sistemidir. Teori bunun üzerine yazma bir sürü engeller yani, /
, /usr
, veya /home
, daha az parçalanma ve bir kaza durumunda dosyanın bozulması riski yol açan ... Bu posta kutuları ve malzeme üzerinde neden de /var
varsayılan olarak değil, ev yapımı ...
/var/tmp
her zaman dünya çapında yazılabilir bir sistem temp dizinidir. (Bunu, olmayacak şekilde değiştirebilirsiniz, ancak bu, Unix benzeri sistemlerin parçaları kırdıktan sonra tutmanıza izin vermekten mutluluk duyduğu şeylerden biridir). Sistemde başka bir kullanıcınız varsa,/var/tmp/vim_«your_username»
kendi seçtiği izinlerle oluşturabilir . Ve sonra muhtemelen vim tempfiles tarafından yok edilecek önemli dosyalarınıza semboliklerle doldurun.