Par défaut, vim
laisse les fichiers d'échange dans mon répertoire de projet, et en cas de panne, il laisse des fichiers de sauvegarde.
Puis-je empêcher cela? Ou dois-je mettre à jour le .VCSignore
fichier de tous mes projets ?
la source
Par défaut, vim
laisse les fichiers d'échange dans mon répertoire de projet, et en cas de panne, il laisse des fichiers de sauvegarde.
Puis-je empêcher cela? Ou dois-je mettre à jour le .VCSignore
fichier de tous mes projets ?
Par défaut, Vim ne laisse pas de fichiers de sauvegarde derrière. Ce sont simplement des fichiers transitoires qui existent pendant que Vim enregistre le tampon sur le disque. Comme décrit dans :help backup-table
ce comportement, vous pouvez contrôler les options 'backup'
et '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
Quant aux fichiers d'échange, il peut être utile de les collecter dans un répertoire dédié. Cela peut être fait avec l' 'directory'
option. Par exemple
:set directory^=$HOME/.vim/tmp//
ajoutera $HOME/.vim/tmp
en tête de la liste des répertoires que Vim tentera d'utiliser lors de la création d'un fichier d'échange. La fin //
fait que Vim code le nom complet du chemin vers le fichier afin qu'il n'y ait pas de collisions avec des fichiers de noms similaires provenant de différents répertoires.
Avertissement : cela désactive efficacement la possibilité pour Vim de remarquer si plusieurs utilisateurs tentent de modifier le même fichier car les fichiers d'échange sont stockés dans des emplacements différents.
L'extrait ci-dessous (adapté du vimrc de tpope ) désactivera également le fichier d'échange pour un tampon lorsqu'il n'est pas modifié, de cette façon si Vim / votre ordinateur se bloque lorsque vous avez un tas de fichiers ouverts, les fichiers d'échange laissés derrière ne seront que pour les fichiers modifiés.
autocmd CursorHold,BufWritePost,BufReadPost,BufLeave *
\ if isdirectory(expand("<amatch>:h")) | let &swapfile = &modified | endif
Avertissement : étant donné que le fichier d'échange n'existe que lorsque le tampon est modifié, cela a un effet similaire à celui du paramètre 'directory'
. Si le tampon n'est pas modifié, un autre Vim peut commencer à le modifier sans préavis. Si le deuxième Vim enregistre avant que le premier n'effectue plus de modifications, alors elles ne seront pas remarquées jusqu'à ce que l'utilisateur essaie d'enregistrer ou quelque chose déclenche Vim pour vérifier si le fichier est modifié.
J'utilise mon .vimrc
sur plusieurs machines, y compris les serveurs partagés. Je ne veux pas nécessairement que les gens puissent voir les fichiers sur lesquels je travaille et j'aime garder mon répertoire personnel relativement propre. C'est donc ma solution qui fonctionnera très bien sur Linux et 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,
Notez que cela créera un .tmp
répertoire sous ~/.vim
s'il n'existe pas déjà. Ce serait la nouvelle maison de vos fichiers d'échange. Pour les fichiers d'annulation, j'ai également les éléments suivants dans mon .vimrc
(qui est assez similaire):
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
Voici ce que je fais dans mon 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
Il créera /var/tmp/vim_<username>
et utilisera ceci pour stocker tous les fichiers liés à vim. Garder votre répertoire de projet propre.
L'utilisation whoami
garantit que vous pouvez utiliser le vimrc globalement (c'est-à-dire pour l'utilisateur & root) tout en utilisant des répertoires séparés; si vous n'en avez pas besoin, vous pouvez le remplacer par un répertoire codé en dur pour un démarrage plus rapide. Vous pouvez également utiliser le ~/.vim/
répertoire, mais j'aime l'utiliser /var/tmp
car il s'agit généralement d'un système de fichiers séparé.
J'utilise /var/tmp
car /tmp
est souvent effacé au redémarrage. Vous ne voulez probablement pas que ce répertoire soit accessible en écriture, car les gens pourraient alors y placer des fichiers pour faire des choses potentiellement dangereuses lorsque vous ouvrez un fichier.
/var/tmp
est toujours accessible en écriture, c'est un répertoire temporaire du système. (Eh bien, vous pouvez le changer pour ne pas l'être, mais c'est l'une de ces choses où les systèmes de type Unix sont heureux de vous laisser garder les morceaux après l'avoir cassé). Si vous avez un autre utilisateur sur le système, il / elle pourrait créer/var/tmp/vim_«your_username»
avec les autorisations de son choix. Et puis remplissez-le avec des liens symboliques vers vos fichiers importants, qui seront probablement détruits par les fichiers temporaires vim.adduser
ou tout ce que vous utilisez pour créer des utilisateurs. Dans tous les cas, la plupart des gens utilisent Vim sur des machines de confiance (mais votre commentaire est bon en tant que tel).$HOME
quelque part./var/
c'est un système de fichiers différent. La théorie est que cela empêchera beaucoup d'écritures sur/
,/usr
ou/home
, conduisant à moins de fragmentation et de risque de corruption de fichiers en cas de plantage ... C'est aussi pourquoi les boîtes aux lettres et les trucs sont activés/var
par défaut, et non dans le homedir ...