Pourquoi Vim enregistre-t-il des fichiers avec une extension ~?

180

J'ai constaté que lors de l'utilisation de Vim sur Windows, Vim enregistre le fichier, un .ext.swpfichier qui est supprimé à la fermeture de la fenêtre Vim et un .ext~fichier.

Je suppose que le .ext.swpfichier est une sauvegarde de session au cas où Vim plante. Quel est le but du .ext~fichier cependant? S'agit-il d'un fichier de sauvegarde permanent? C'est ennuyeux car j'aimerais copier tous les fichiers sur lesquels je travaille sur mon hôte, sans ces doublons. Comment puis-je désactiver cette option ou , si elle existe pour une bonne raison, masquer les fichiers ?

Ross
la source
Avez-vous un fichier ouvert simultanément à plus d'un endroit, ils créeront un fichier .ext.swp.
dirkgently
2
dirkgently: Non, ici je peux ouvrir un fichier dans la seule fenêtre de vim et cela créera le fichier .swp. Je ne suis pas trop inquiet à ce sujet car il est supprimé lorsque j'enregistre / ferme la fenêtre.
Ross

Réponses:

221

Le *.ext~fichier est un fichier de sauvegarde, contenant le fichier tel qu'il était avant de le modifier.

Le *.ext.swpfichier est le fichier d'échange, qui sert de fichier de verrouillage et contient l'historique d'annulation / rétablissement ainsi que toute autre information interne dont Vim a besoin. En cas de plantage, vous pouvez rouvrir votre fichier et Vim restaurera son état précédent à partir du fichier d'échange (ce que je trouve utile, donc je ne l'éteint pas).

Pour désactiver la création automatique de fichiers de sauvegarde, utilisez (dans votre vimrc):

set nobackup
set nowritebackup

nowritebackupchange le comportement par défaut de "sauvegarde" de Vim, qui est:

  1. écrire le tampon dans un nouveau fichier
  2. supprimer le fichier d'origine
  3. renommer le nouveau fichier

et oblige Vim à écrire le tampon dans le fichier d'origine (ce qui entraîne le risque de le détruire en cas d'erreur d'E / S). Mais vous évitez de "sauter des fichiers" sur le bureau Windows avec lui, ce qui est la principale raison pour laquelle je l'ai mis nowritebackupen place.

Tomalak
la source
7
+1 pour you prevent "jumping files" on the Windows desktop. Google a trouvé cette réponse
Merlyn Morgan-Graham
1
En fait, dois-je avoir les deux nobackupet nowritebackup? Existe-t-il un moyen d'écrire une copie du fichier en tant que sauvegarde, mais ne pas écrire / supprimer / renommer des choses?
Merlyn Morgan-Graham
@Merlyn: Si vous avez backup(par opposition à nobackup), alors Vim créera une sauvegarde (le *.ext~fichier). Ceci n'a aucun rapport avec nowritebackup.
Tomalak
6
Il y a une table décrivant un comportement différent entre combinaison de ces commutateurs: help backup-table. Il s'avère que le réglage ni nobackupni nowritebackup, mais à la place, le réglage backupcopy=yesrésout également le problème du "saut". Cela peut nuire à la performance, cependant, alors à chacun leur propre
Merlyn Morgan-Graham
27
Au lieu de désactiver, set backupdir=~/.vim/backupfaites une sauvegarde dans un répertoire en .vimrc ou _vimrc sous Windows
tsukimi
224

Je pense que la meilleure solution est de placer ces lignes dans votre fichier vimrc

set backupdir=~/vimtmp//,.
set directory=~/vimtmp//,.

La première ligne est pour les fichiers de sauvegarde, la deuxième ligne pour les fichiers d'échange. La double barre oblique à la fin garantit qu'il n'y a pas de conflit dans le cas de deux fichiers ayant le même nom, voir les commentaires (au moment de cette modification cette option n'est honorée que pour les fichiers d'échange, pas encore pour les fichiers de sauvegarde ). Le ,.permet vimd'utiliser le répertoire courant si le premier n'existe pas.

Vous devez créer un répertoire dans votre répertoire personnel appelé vimtmp pour que cela fonctionne. Vérifiez également que les sauvegardes sont activées dans votre configuration (ajoutez set backupsi non).

De cette façon, vous bénéficiez des deux mondes, vous n'avez pas besoin de voir les fichiers, mais si quelque chose ne fonctionne pas, vous pouvez aller chercher votre fichier de sauvegarde auprès de vimtmp. N'oubliez pas de nettoyer le répertoire de temps en temps.

user183135
la source
22
+1 J'ai en fait le mien réglé sur ~ / .vim / tmp, mais de toute façon, cela m'a sauvé le cul à plusieurs reprises.
JC Yamokoski le
11
Pourquoi avez-vous besoin,. à la fin de chaque ligne?
shin
9
@shin Vim utilisera le premier répertoire disponible, donc dans ce cas, si ~ / vimtmp n'existe pas, il utilisera le répertoire de travail actuel
xixixao
3
@SalmanPK Dans un monde idéal, vous ne devriez pas éditer les fichiers de configuration directement sur des serveurs accessibles au public
Score_Under
12
Utilisez deux barres obliques à la fin du chemin. Par exemple, définissez backupdir = ~ / .vim / .backup // - le "//" à la fin du répertoire signifie que les noms de fichiers seront construits à partir du chemin complet vers le fichier avec tous les séparateurs de chemin remplacés par pourcentage "% " signe. Cela garantira l'unicité du nom de fichier dans le répertoire de conservation.
Hacknightly
25

Pour désactiver ces fichiers, ajoutez simplement ces lignes à .vimrc (fichier de configuration vim sur un système d'exploitation basé sur unix):

set nobackup       #no backup files
set nowritebackup  #only in case you don't want a backup file while editing
set noswapfile     #no swap files
rogeriopvl
la source
12
:set nobackup 

désactivera les sauvegardes. Vous pouvez également définir un backupdir si vous souhaitez toujours ces fichiers de sauvegarde mais dans un dossier central. De cette façon, votre répertoire de travail n'est pas jonché de fichiers ~.

Vous trouverez plus d'informations sur les sauvegardes sous : la sauvegarde .

f3lix
la source
12

Et vous pouvez également définir une extension de sauvegarde différente et où enregistrer ces sauvegardes (je préfère ~/.vimbackupssous Linux). J'utilisais des sauvegardes «versionnées», via:

au BufWritePre * let &bex = '-' . strftime("%Y%m%d-%H%M%S") . '.vimbackup'

Cela définit une extension de sauvegarde dynamique ( ORIGINALFILENAME-YYYYMMDD-HHMMSS.vimbackup).

Zsolt Botykai
la source
3
vous voudrez peut-être inclure comment configurer le répertoire de sauvegarde, c'est-à-dire mettre set backupdir=~/.vimbackupsdans votre ~ / .vimrc
rampion
1
L'aide de vim décrit complètement cette technique. Voir:help backupext
netjeff
8

Mettez cette ligne dans votre vimrc:

set nobk nowb noswf noudf " nobackup nowritebackup noswapfile noundofile


Dans ce serait le:

C:\Program Files (x86)\vim\_vimrc

fichier pour la configuration vim à l'échelle du système pour tous les utilisateurs.

La définition du dernier noundofileest important dans Windows pour empêcher la création de *~fichiers tilda après l'édition.


J'aurais aimé que Vim ait cette ligne incluse par défaut. Personne n'aime les répertoires laids.

Laissez l'utilisateur choisir si et comment il souhaite activer d'abord les fonctionnalités avancées de sauvegarde / annulation des fichiers.

C'est la partie la plus ennuyeuse de Vim.

La prochaine étape pourrait être la configuration:

set noeb vb t_vb= " errorbells visualbell

pour désactiver les bips ainsi que :-)


la source
Merci beaucoup pour cela! "noundofile" était l'option qui a finalement éliminé cette horrible litière. (Et je suis d'accord à 100% avec tout ce que vous avez écrit dans votre message!)
pwmusic
6

Vous avez raison de dire que le .swpfichier est utilisé par vim pour le verrouillage et comme fichier de récupération.

Essayez de mettre set nobackupvotre vimrc si vous ne voulez pas de ces fichiers. Consultez la documentation de Vim pour les différentes options liées à la sauvegarde si vous voulez le scoop entier, ou voulez avoir des fichiers .bak à la place ...

dwc
la source
+1 pour mentionner l'objectif en tant que fichier de verrouillage. Je n'y ai pas pensé.
Tomalak
5

La seule option qui a fonctionné pour moi était de mettre cette ligne dans mon fichier ~ / .vimrc

définir noundofile

Les autres options faisant référence aux fichiers de sauvegarde n'ont pas empêché la création des fichiers temporaires se terminant par ~ (tilde)

Logan
la source
Cela a finalement fonctionné pour moi. Pourquoi n'est-ce pas mentionné dans d'autres réponses? Cela supprime les .<filename>.un~fichiers : tandis que les autres options ne suppriment que les <filename>~fichiers.
JLT
0

J'ai dû ajouter set noundofileà ~ _gvimrc

Le répertoire "~" peut être identifié en changeant le répertoire avec la cd ~commande

Josh
la source