Désactiver la création de fichiers d'échange dans vim

216

Existe-t-il un moyen de désactiver la .swpcréation de fichiers dans vim? ou du moins créez-les tous au même endroit pour que je puisse les trouver et les supprimer facilement.

Je les trouve particulièrement ennuyeux lorsque je copie le répertoire parent lors de l'édition en même temps. Bien sûr, je sais que je peux utiliser find -exec pour les trouver et les supprimer. Mais je veux une solution plus pratique.

Nadia Alramli
la source

Réponses:

255

Pour désactiver les fichiers d'échange à partir de vim, tapez

:set noswapfile

Pour désactiver les fichiers d'échange de façon permanente, ajoutez ce qui suit à votre ~/.vimrcfichier

set noswapfile

Pour plus de détails, voir les documents Vim sur swapfile

dwc
la source
6
Les fichiers d'échange sont bons si votre éditeur tombe en panne (panne de courant, etc.), gardez juste à l'esprit.
koonse
1
Une autre option est toujours d'utiliser le fichier d'échange, mais laissez-le en mémoire, afin qu'il ne continue pas d'écrire sur le disque dur. Cela ne peut pas vous protéger contre la perte du fichier pendant une panne, mais si vous ouvrez le même fichier dans anthther vim, il vous le dira immédiatement. La commande est: set directory = / dev / shm
webbertiger
La réponse de trusktr vous permet de conserver les avantages des fichiers d'échange tout en répondant aux préoccupations du PO.
jpaugh
Depuis l'intérieur de vim, vous pouvez également désactiver le fichier d'échange lors de l'ouverture d'un fichier::noswapfile edit /path/to/file
Torkel Bjørnson-Langen
Ma philosophie personnelle sur la perte de données est DBAB et j'économise souvent ...
Samy Bencherif
156

Définissez les variables suivantes dans .vimrc ou / etc / vimrc pour que vim place les fichiers d'échange, de sauvegarde et d'annulation dans un emplacement spécial au lieu du répertoire de travail du fichier en cours de modification:

set backupdir=~/.vim/backup//
set directory=~/.vim/swap//
set undodir=~/.vim/undo//

L'utilisation de doubles barres obliques dans le chemin indique à vim d'activer une fonction où il évite les collisions de noms. Par exemple, si vous modifiez un fichier à un emplacement et un autre fichier à un autre emplacement et que les deux fichiers ont le même nom, vous ne voulez pas qu'une collision de noms se produise dans ~ / .vim / swap /. Si vous spécifiez ~ / .vim / swap // avec deux barres obliques de fin, vim créera des fichiers d'échange en utilisant l'intégralité du chemin des fichiers en cours d'édition pour éviter les collisions (les barres obliques du chemin d'accès au fichier seront remplacées par le symbole de pourcentage%).

Par exemple, si vous modifiez /path/one/foobar.txt et /path/two/foobar.txt, vous verrez alors deux fichiers d'échange dans ~ / .vim / swap / nommés% path% one% foobar.txt et% path% two% foobar.txt, respectivement.

trusktr
la source
Vous pouvez également ajouter qu'un certain temps, les fichiers de sauvegarde enregistrés pourraient enregistrer un skin de développeur
Bartek Skwira
Commentaire: (pas de critique), cela semble bon principalement pour le développement, car pour la lecture de fichiers et de petites modifications ou la prise de notes sans importance qui est une grande partie de l'utilisation de vim pour beaucoup de gens, il semble qu'un travail de comptabilité supplémentaire soit mieux laissé de côté. Personnellement, je préfère que tous les travaux n'aient aucun échange ou autre sauvegarde automatique. Si j'ai vraiment besoin de développer quelque chose, je préfère avoir un framework de plus haut niveau pour me protéger, de préférence avec un contrôle de version de code, etc.
j riv
@LelaDax C'est vrai, la plupart du temps ces fichiers sont pour la plupart inutiles car j'utilise git pour tout mon code source. En de rares occasions (comme un accident), ils sont toutefois utiles. Mais en fait, l'histoire d'annulation que j'utilise beaucoup. Il est beaucoup plus facile de naviguer aussi rapidement que de consulter git commits pour afficher l'historique précédent. gundo facilite et facilite la navigation dans l'arbre d'annulation. Je pourrais vivre sans les fichiers d'échange et de sauvegarde.
trusktr
26
Juste pour info pour les gens qui sont nouveaux (comme moi haha ​​...) vous devez vous rendre dans ~ / .vim / et créer les répertoires vous-même. Il ne les créera pas automatiquement pour vous.
août
1
Vous pouvez également écrire du code dans votre vimrc pour créer automatiquement les dossiers pour vous, ce que j'ai fait dans le mien. Donc, sur les nouveaux systèmes, je reçois juste mon vimrc, et il s'occupe du reste.
trusktr
42

J'ai trouvé la réponse ici :

vim -n <file>

ouvre le fichier sans fichier d'échange.

En outre:

set dir=/tmp

in .vimrccrée les fichiers d'échange dans /tmp.

markus_b
la source
Et les *.ext~fichiers de sauvegarde? Existe-t-il une option de ligne de commande pour les désactiver également?
Salman von Abbas
C'est très utile pour ces gros fichiers uniques! Merci.
Felipe Alvarez
28

voici mes paramètres de sauvegarde personnels ~ / .vimrc

" backup to ~/.tmp 
set backup 
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
set backupskip=/tmp/*,/private/tmp/* 
set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
set writebackup
cpjolicoeur
la source
13

Je suis d'accord avec ceux qui se demandent pourquoi vim a besoin de tous ces trucs de «reprise après sinistre» alors qu'aucun autre éditeur de texte ne s'en soucie. Je ne veux pas que vim crée des fichiers supplémentaires dans le répertoire du fichier modifié lorsque je le modifie, merci beaucoup. À cette fin, j'ai ceci dans mon _vimrcpour désactiver les fichiers d'échange et déplacer les fichiers de «sauvegarde» irritants vers le répertoire Temp:

" Uncomment below to prevent 'tilde backup files' (eg. myfile.txt~) from being created
"set nobackup

" Uncomment below to cause 'tilde backup files' to be created in a different dir so as not to clutter up the current file's directory (probably a better idea than disabling them altogether)
set backupdir=C:\Windows\Temp

" Uncomment below to disable 'swap files' (eg. .myfile.txt.swp) from being created
set noswapfile
Jez
la source
9
Je pense que le fait que d'autres éditeurs ne se soucient pas de cela reflète moins les autres éditeurs que cela ne reflète mal sur vi (m). Le choix de faire du même répertoire l'emplacement par défaut pour placer ces fichiers est un peu malheureux, bien qu'au moins marginalement défendable. (par exemple, dans un environnement multiserveur hautement croisé, il peut ne pas être évident où trouver un fichier de récupération au moment où vous en avez le plus besoin)
Domingo Ignacio
3
La gestion des fichiers d'échange de Vim est tout simplement horrible. Je l'ai utilisé pour récupérer des données perdues peut-être 5 fois. Mais j'ai eu du mal à récupérer un fichier d'échange environ 9 000 fois, ce qui est toujours identique au fichier, ou pire, une version obsolète. Ce pourrait être une bonne fonctionnalité si le processus de récupération n'était pas si nul. Recover.vim aide un peu, mais est toujours trop interactif.
joeytwiddle
3
Sublime Text a disaster recovery. J'aime cela! Je n'ai même pas besoin d'enregistrer un fichier, lorsque je reprends toutes les modifications que j'ai apportées, enregistrées ou non, sont remontées.
leetNightshade
J'ai une simple autocommande qui écrit toutes les modifications dès qu'elles sont apportées, ce qui rend les fichiers d'échange et les sauvegardes inutiles.
tbodt
2
@ TorkelBjørnson-Langen C'est probablement ma faute d'avoir redémarré ma machine sans fermer toutes mes sessions Vim, puis d'être paranoïaque sur les fichiers de récupération qui sont réellement valides. Quoi qu'il en soit, j'ai essayé de tirer le meilleur parti
joeytwiddle
7

Vous pouvez définir backupdir et directory sur null afin de désactiver complètement vos fichiers d'échange, mais il est généralement recommandé de simplement les placer dans un répertoire centralisé. Vim prend soin de s'assurer qu'il n'y a pas de collisions de noms ou quelque chose comme ça; c'est donc une alternative complètement sûre:

set backupdir=~/.vim/backup/
set directory=~/.vim/backup/
monokrome
la source
3
Vous devez ajouter une double barre oblique //à la fin des chemins afin de pouvoir modifier deux fichiers portant le même nom en même temps.
Samuel O'Malley
Merci, @ SamuelO'Malley. Que fait le //?
monokrome
Jetez un oeil :help directorysi vous souhaitez lire les documents pour cela. La double barre oblique indique à vim de coder le chemin complet du fichier dans le nom du fichier d'échange, par exemple %home%sam%dotfiles%.gitignore.swp, plutôt que juste .gitignore.swp.
Samuel O'Malley
3

Si vous placez set directory=""votre fichier exrc, vous désactiverez le fichier d'échange. Cependant, cela désactivera la récupération.

Plus d'infos ici .

Brian Rasmussen
la source
3

Si vous utilisez git, vous pouvez ajouter *.swpà .gitignore.

Evan Hu
la source
Je pense que c'est ce dont la plupart des utilisateurs ont besoin! La désactivation des fichiers d'échange est une mauvaise pratique.
DenisKolodin
2

créer aucun fichier d'échange de vim uniquement pour un fichier particulier

autocmd bufenter  c:/aaa/Dropbox/TapNote/Todo.txt :set noswapfile
zzapper
la source
1
Ou pour tous les fichiers d'un répertoire particulier, ce qui suit semble fonctionner (seulement de brefs tests):autocmd bufenter c:/aaa/Dropbox/TapNote/* :set noswapfile
scottkosty
1

Pour quiconque essaie de définir cela pour les projets Rails, ajoutez

set directory=tmp,/tmp

Dans votre

~/.vimrc

Ainsi, les fichiers .swp seront dans leur emplacement naturel - le répertoire tmp (par projet).

valk
la source