Vim'in çok fazla dosya bırakmasını nasıl engelleyebilirim (takas, yedekleme, geri alma gibi)?


13

Varsayılan olarak, vimtakas dosyalarını proje dizinimde bırakır ve çökmelerde yedekleme dosyaları bırakır.

Bunu önleyebilir miyim? Yoksa tüm projelerimin .VCSignoredosyasını güncellemem gerekiyor mu?

Yanıtlar:


16

Yedekleme dosyaları

Varsayılan olarak Vim, yedekleme dosyalarını geride bırakmaz. Bunlar Vim arabelleği diske kaydederken var olan geçici dosyalardır. :help backup-tableBu 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

Dosyaları değiştir

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/tmptakas 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.


5

.vimrcPaylaşı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 .tmpaltı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

1

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/tmpgenellikle ayrı bir dosya sistemi olduğu için kullanmayı seviyorum .

Kullandığım /var/tmpçünkü /tmpsı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.


1
/var/tmpher 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.
derobert

@derobert Yalnızca mevcut değilse. Sistem genelinde ve çok sayıda kullanıcı kullanıyorsanız, muhtemelen bu dizinin oluşturulmasını adduserkullanı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).
Martin Tournoij

Doğru, sadece mevcut değilse. Sistem geçici dizininde olan bu geçici dosyaların ne zaman temizlendiğine bağlı olarak beklenmedik bir şekilde gerçekleşir. Neden sadece bir $HOMEyere koymadığından emin değilim .
derobert

@derobert /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 /varvarsayılan olarak değil, ev yapımı ...
Martin Tournoij
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.