Standardmäßig vim
bleiben Auslagerungsdateien in meinem Projektverzeichnis und bei Abstürzen bleiben Sicherungsdateien erhalten.
Kann ich das verhindern? Oder muss ich alle .VCSignore
Dateien meiner Projekte aktualisieren ?
quelle
Standardmäßig vim
bleiben Auslagerungsdateien in meinem Projektverzeichnis und bei Abstürzen bleiben Sicherungsdateien erhalten.
Kann ich das verhindern? Oder muss ich alle .VCSignore
Dateien meiner Projekte aktualisieren ?
Standardmäßig hinterlässt Vim keine Sicherungsdateien. Es handelt sich lediglich um temporäre Dateien, die vorhanden sind, während Vim den Puffer auf der Festplatte speichert. Wie in :help backup-table
diesem Verhalten beschrieben, kann mit den Optionen 'backup'
und gesteuert werden 'writebackup'
:
'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
Bei Auslagerungsdateien kann es nützlich sein, sie in einem dedizierten Verzeichnis zu sammeln. Dies kann mit der 'directory'
Option erfolgen. Beispielsweise
:set directory^=$HOME/.vim/tmp//
wird $HOME/.vim/tmp
zum Kopf der Liste der Verzeichnisse hinzugefügt , die Vim beim Erstellen einer Auslagerungsdatei zu verwenden versucht. Durch //
das Nachstellen codiert Vim den gesamten Pfadnamen der Datei, sodass keine Kollisionen mit Dateien mit ähnlichem Namen aus verschiedenen Verzeichnissen auftreten.
Vorsichtsmaßnahme : Dadurch wird die Fähigkeit von Vim, zu bemerken, wenn mehrere Benutzer versuchen, dieselbe Datei zu bearbeiten, effektiv deaktiviert, da die Auslagerungsdateien an verschiedenen Orten gespeichert sind.
Das folgende Snippet (angepasst von tpopes vimrc ) deaktiviert auch die Auslagerungsdatei für einen Puffer, wenn sie nicht geändert wird. Wenn Vim / Ihr Computer abstürzt, wenn mehrere Dateien geöffnet sind, bleiben nur die Auslagerungsdateien übrig für geänderte Dateien.
autocmd CursorHold,BufWritePost,BufReadPost,BufLeave *
\ if isdirectory(expand("<amatch>:h")) | let &swapfile = &modified | endif
Vorsichtsmaßnahme : Da die Auslagerungsdatei nur vorhanden ist, wenn der Puffer geändert wird, hat dies einen ähnlichen Effekt wie die Einstellung 'directory'
. Wenn der Puffer unverändert ist, kann ein anderer Vim ihn ohne Vorankündigung bearbeiten. Wenn der zweite Vim speichert, bevor der erste weitere Änderungen vornimmt, werden diese erst bemerkt, wenn der Benutzer versucht, die Datei zu speichern, oder wenn Vim durch eine Aktion veranlasst wird, zu überprüfen, ob die Datei geändert wurde.
Ich verwende meine .vimrc
auf mehreren Computern, einschließlich gemeinsam genutzter Server. Ich möchte nicht unbedingt, dass die Leute die Dateien sehen, an denen ich arbeite, und ich mag es, mein Homeverzeichnis relativ sauber zu halten. Das ist also meine Lösung, die unter Linux und Mac OS X einwandfrei funktioniert.
" 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,
Beachten Sie, dass dadurch ein .tmp
Verzeichnis erstellt wird, unter dem ~/.vim
es noch nicht existiert. Dies wäre das neue Zuhause Ihrer Auslagerungsdateien. Für Undo-Dateien habe ich auch folgendes in meinem .vimrc
(was ziemlich ähnlich ist):
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
Das mache ich in meinem vimrc:
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
/var/tmp/vim_<username>
Hiermit werden alle vim-bezogenen Dateien erstellt und gespeichert. Halten Sie Ihr Projektverzeichnis sauber.
Durch whoami
die Verwendung von wird sichergestellt, dass Sie den vimrc global (dh für den Benutzer und root) verwenden können, während Sie immer noch separate Verzeichnisse verwenden. Wenn Sie dies nicht benötigen, können Sie es durch ein fest codiertes Verzeichnis ersetzen, um den Start zu beschleunigen. Sie könnten auch ein ~/.vim/
Verzeichnis verwenden, aber ich verwende es gerne, /var/tmp
weil es normalerweise ein separates Dateisystem ist.
Ich benutze, /var/tmp
weil /tmp
beim Neustart oft gelöscht wird. Sie möchten dieses Verzeichnis wahrscheinlich nicht für die ganze Welt beschreibbar machen, da die Benutzer dort Dateien ablegen können, um beim Öffnen einer Datei potenziell schädliche Aktionen auszuführen.
/var/tmp
ist immer von der Welt beschreibbar - es ist ein temporäres Systemverzeichnis. (Nun, Sie können es so ändern, dass es nicht so ist, aber das ist eines der Dinge, bei denen Unix-ähnliche Systeme gerne zulassen, dass Sie die Teile behalten, nachdem Sie sie zerbrochen haben.) Wenn Sie einen anderen Benutzer im System haben, kann er/var/tmp/vim_«your_username»
mit Berechtigungen seiner Wahl erstellen . Und füllen Sie es dann mit Symlinks zu Ihren wichtigen Dateien, die wahrscheinlich von vim tempfiles zerstört werden.adduser
was auch immer Sie verwenden, um Benutzer zu erstellen . In jedem Fall verwenden die meisten Leute Vim auf vertrauenswürdigen Rechnern (aber Ihr Kommentar ist als solcher gut).$HOME
irgendwo hineingesteckt hast ./var/
ist ein anderes Dateisystem. Die Theorie ist, dass es eine Menge von Schreibvorgängen auf zu verhindern/
,/usr
oder/home
, was zu weniger Fragmentierung & Risiko einer Beschädigung von Dateien im Fall eines Absturzes ... Dies ist auch , warum Briefkästen und Sachen auf sind/var
standardmäßig und nicht in dem homedir ...