Chaque fois que je coupe une session dans vim en perdant ma connexion, je suis plutôt rempli de dred (et pourtant je continue à utiliser vim ... quel masochiste je dois être) parce que quand j'ouvre à nouveau mes fichiers une pile de swap- les fichiers attendent pour tenter de détruire mon travail. Quelles sont les meilleures pratiques pour travailler avec des fichiers d'échange vim? Choisissez-vous simplement le plus récent? Si le fichier fonctionne comme prévu, supprimez-vous simplement les fichiers d'échange? Comment vous en débarrassez-vous?
14
Réponses:
Ne paniquez pas!
La récupération de fichiers est toujours sûre, car vim n'écrit jamais de modifications tant que vous ne les avez pas écrites vous-même. Ainsi, la récupération à partir d'un fichier d'échange et la fermeture sans sauvegarde ne changeront rien.
Organisez vos fichiers d'échange:
Obtenez vim pour mettre tous vos fichiers d'échange au même endroit, afin que vous sachiez toujours où ils se trouvent:
ou où vous préférez. L'utilisation
//
à la fin du nom de fichier oblige Vim à utiliser des chemins de fichier absolus pour les noms de fichier d'échange afin de ne pas obtenir de collisions de noms. Assurez-vous que le répertoire existe, sinon vim ne l'utilisera pas (il ne le créera pas pour vous).Remarque: Cela ne fonctionne que sur les variables d'environnement, si vous souhaitez utiliser une variable vimscript, nous devons utiliser un peu de
:execute
magie:Diff les différences:
L'aide de vim propose une commande très utile d'utiliser dans cette situation:
:DiffOrig
. Ce n'est pas une commande vim par défaut , copiez donc l'implémentation de:h :DiffOrig
dans votre vimrc. (c'est aussi dans$VIMRUNTIME/defaults.vim
si vous avez vim8). Maintenant, vous pouvez récupérer le fichier et exécuter simplement DiffOrig pour obtenir un vimdiff de ce qui a changé depuis la version non modifiée.Si vous souhaitez comparer le contenu de plusieurs fichiers d'échange, récupérez votre fichier avec chaque fichier d'échange différent, puis écrivez le résultat dans des fichiers temporaires. Maintenant, chargez les fichiers et exécutez-les
:diffthis
sur chaque fichier, apportez les modifications souhaitées, réécrivez-les dans le fichier d'origine et supprimez les fichiers temporaires et d'échange.Commandes utiles:
:swapname
: obtenir le nom que vim utilise pour le fichier d'échange pour le tampon actuel (:h :swapname
):recover
: récupère le fichier sélectionné, comme lorsque vous démarrez vim et appuyez sur R(:h :recover
)Consultez l'aide:
Vim a une section entière du manuel de l' utilisateur sur la récupération:
:usr_11.txt
l'aide de référence de vim sur les fichiers d'échange:
:h swap-file
,h recovery
Aide sur l'option de répertoire (pour définir l'emplacement du fichier d'échange):
:h 'directory'
Edit: exemple modifié pour définir le répertoire, comme indiqué dans les commentaires de @B Layer
la source
exec
...set directory^=$HOME/.vim/swap//
fonctionne très bien tant qu'il$HOME
s'agit d'une variable d'environnement initialisée. Tu vois:h expand-env
. Fonctionne également avecdictionary
,undodir
etbackupdir
pour n'en nommer que quelques-uns.Personnellement, j'ai désactivé les fichiers d'échange et de sauvegarde, car cela a tendance à créer des fichiers d'échange et des fichiers de sauvegarde partout et crée fréquemment des conflits. L'annulation persistante de Vim a été beaucoup plus fiable et sans erreur.
Vim a actuellement une annulation persistante, c'est une méthode de sauvegarde beaucoup plus fine. Chaque fois que vous appuyez sur Esc, l'état actuel du fichier est capturé.
Vous pouvez utiliser des
:undolist
plugins comme gundo ou undo-tree pour parcourir votre historique d'annulation.Pour utiliser vim de cette façon:
Dans la coque:
À Vim
Pour désactiver les fichiers d'échange:
:set noswapfile
la source
'writebackup'
résout un autre problème). L'activation de l'annulation persistante n'aidera pas en cas de panne de votre ordinateur. Vous pouvez affirmer que les fichiers d'échange ne sont pas nécessaires pour d'autres raisons (stabilité du système d'exploitation moderne, existence d'onduleurs), mais vous ne l'avez pas fait dans cette réponse. 2. le réglage'undodir'
n'active pas l'annulation persistante! Vous devez définir'undofile'
pour cette