Quel est le but des fichiers d'échange?

74

Lorsque je modifie des fichiers, Vim a tendance à créer des fichiers nommés , ce qui me gêne. Depuis , je vois que l' option supprime la création de fichiers d'échange..filename.swpvim -h-n

Existe-t-il une directive vimrc que je puisse utiliser pour désactiver les fichiers d'échange par défaut?

Quel est le but des fichiers d'échange et quelles sont les fonctionnalités qui me manqueraient si je les supprimais?

200_success
la source
FWIW, je trouve les fichiers d'échange ennuyeux également et, pendant un moment, j'ai essayé de suivre les instructions noswapfileci-dessous. J'ai finalement cédé et éteint cela, cependant, parce qu'apparemment, les avantages l'emportent sur les inconvénients - buuuuuut, je ne me souviens pas réellement de ce qui m'a convaincu de restaurer l'utilisation des fichiers d'échange. Mon ordinateur est probablement tombé en panne et je ne pouvais pas restaurer certains fichiers que j'avais perdus, ce qui aurait été trivial si les fichiers d'échange étaient activés.
Kyle Strand

Réponses:

89

Raisons pour les fichiers d'échange

Les fichiers d'échange stockent les modifications apportées à la mémoire tampon. Si Vim ou votre ordinateur se bloque, ils vous permettent de récupérer ces modifications.

Les fichiers d'échange permettent également d'éviter que plusieurs instances de Vim ne modifient le même fichier. Cela peut être utile sur les systèmes multi-utilisateurs ou simplement savoir si un autre Vim est déjà en train de modifier un fichier.

Désactiver les fichiers d'échange

Si vous souhaitez désactiver entièrement la création de fichiers d'échange (ce que je ne recommanderais pas), vous pouvez ajouter set noswapfileà votre fichier .vimrc. Ceci définit la valeur globale de l'option. Vous pouvez ensuite remplacer cela pour des tampons spécifiques en utilisant :setlocal swapfilelors de l'exécution de Vim.

Organisation des fichiers d'échange

Si votre problème concerne davantage les fichiers supplémentaires répartis sur votre système de fichiers, vous pouvez regrouper tous les fichiers d'échange au même endroit. Par exemple, créez un ~/.vim/tmprépertoire, puis ajoutez

set directory^=$HOME/.vim/tmp//

à votre .vimrc. L' 'directory'option contient une liste de répertoires que Vim utilisera pour essayer de stocker le fichier d'échange.

La ^=syntaxe pour :setpréfixe le nom du répertoire à l'en-tête de la liste, donc Vim vérifiera d'abord ce répertoire.

La //fin du nom du répertoire indique à Vim d'utiliser le chemin absolu du fichier pour créer le fichier d'échange afin d'éviter toute collision entre les fichiers du même nom provenant de différents répertoires.

Notez que cela empêchera Vim de remarquer que plusieurs utilisateurs tentent de modifier le même fichier. Étant donné que le fichier d'échange ne se trouve pas dans le même répertoire que le fichier d'origine, Vim de l'autre utilisateur ne saura rien du fichier d'échange et ne les avertira pas qu'il est déjà en cours de modification.

Jamessan
la source
4
Quel est l'avantage des fichiers d'échange par rapport à persistent-undo maintenant qu'il est dans vim depuis un certain temps?
alpha_989
Je l'utilise vim-auto-save. Est-ce que cela ne rend pas obsolète le besoin de fichiers d'échange?
Kevin
@ Kevin Cela dépend. Si le plugin provoque une sauvegarde dans chaque scénario que Vim écrirait le fichier d'échange, alors probablement. Sinon, il y aura toujours des périodes pendant lesquelles le tampon n'est pas sauvegardé et un fichier d'échange peut aider.
Jamessan
@ alpha_989 Ils sont complémentaires. Un fichier d'échange vous permet de récupérer des modifications non enregistrées. Le fichier persistent-undo vous permet de parcourir l'historique d'annulation à travers les sessions Vim, mais le fichier n'est écrit que lorsque vous enregistrez.
Jamessan
Toute méthode permettant de définir vim no swap pour une seule instance? par exemple vim temp.txt --some-command-that-disable-swap? Mon cas d'utilisation est qu'un observateur surveillera tout changement dans le répertoire. Je souhaite donc désactiver le swap pour éviter les collisions.
Ng Sek Long