Vim enregistre-t-il automatiquement?

13

De :help swap-file:

Mise à jour du fichier d'échange

Le fichier d'échange est mis à jour après avoir tapé 200 caractères ou lorsque vous n'avez rien tapé pendant quatre secondes. Cela ne se produit que si le tampon a été modifié, pas lorsque vous vous êtes déplacé. La raison pour laquelle elle n'est pas constamment mise à jour est que cela ralentirait trop le travail normal. Vous pouvez modifier le nombre de 200 caractères avec l'option «updatecount». Vous pouvez régler l'heure avec l'option 'updatetime'. Le temps est donné en millisecondes. Après avoir écrit dans le fichier d'échange, Vim synchronise le fichier sur le disque. Cela prend un certain temps, en particulier sur les systèmes Unix occupés. Si vous ne le souhaitez pas, vous pouvez définir l'option 'swapsync' sur une chaîne vide. Le risque de perdre du travail augmente cependant. Sur certains systèmes non Unix (MS-DOS, Amiga), le fichier d'échange ne sera pas écrit du tout.

De cela, j'ai quelques questions:

  1. Cela signifie-t-il que Vim enregistre automatiquement votre travail de temps en temps?

  2. "Après avoir écrit dans le fichier d'échange, Vim synchronise le fichier sur le disque." Qu'est-ce que ça veut dire? S'agit-il du fichier en cours d'écriture en mémoire puis sur le disque ou s'agit-il d'autre chose?

  3. Disons que je prends des notes de cours: j'écris vite et je n'ai pas besoin de quitter le mode Insertion. Mais plusieurs fois, je passe à Normal juste pour enregistrer mon travail. Dois-je le faire ou Vim s'assure-t-il que la plupart de mon travail est enregistré même si je ne quitte pas le mode Insertion?

Gonçalo Ribeiro
la source

Réponses:

9
  1. Oui, il enregistre pour échanger le fichier.

Vous pouvez faire un test rapide pour obtenir une sensation de cela. Accédez à un répertoire. Dites vim notest.txtet écrivez du texte. Vous n'avez même pas besoin d'enregistrer le fichier.

Si vous répertoriez des fichiers dans le répertoire de travail, vous trouverez un fichier d'échange. Copiez-le dans un répertoire différent (où vous n'avez pas de fichier "notes.txt", comme par exemple vim notest.txt.

Vous obtenez une note sur l'échange existant, sa modification et les options d'ouverture en lecture seule, de récupération, etc. Choisissez récupérer et le tour est joué! Une "copie" de votre dossier.

  1. Oui, l'échange est conservé en mémoire.

Lorsque Vim lit un fichier, il l'ajoute à la RAM. C'est à la fois pour les fichiers existants et nouveaux (fichiers non encore enregistrés). Lorsque le swap est enregistré, il est vidé sur le disque. Le disque dur. Depuis la RAM.

  1. Oui et non.

Avec les paramètres par défaut, la plupart de votre travail est enregistré. C'est pour chaque 200 caractères entrés, ou lorsque vous avez une pause de 4 secondes. Bien que je fasse confiance au fichier d'échange à enregistrer, j'aime enregistrer mon travail lorsque je sais que je suis sur un système instable. Mais, cela dit, on est assez certain de garder le travail à moins que l'on ne soit très malchanceux et que le système d'hébergement panique juste après avoir écrit une phrase très importante.

En bref, il suffit d'économiser lorsque la conférence est terminée. Si le système devait s'arrêter pour une raison quelconque au milieu d'une classe, le travail est jusque-là dans l'échange.

Bien sûr: si vous n'avez pas de chance, un crash peut survenir pendant l'écriture du fichier d'échange. En conséquence, le fichier d'échange pourrait être corrompu. Je n'ai jamais vécu cela et je ne sais pas quelles parties du fichier pourraient être gâchées, mais cela pourrait valoir la peine. Comme le fichier d'échange est binaire (en l'absence d'un meilleur mot), il semble qu'il soit plus fragile qu'un fichier texte brut.


En note secondaire. Au moins lors de l'utilisation du répertoire de travail pour l'échange, le fichier d'échange est indépendant de l'emplacement lorsqu'il s'agit de récupération. En tant que tel, vous pouvez copier le fichier d'échange vers un nouvel emplacement et récupérer le fichier en tant que nouveau fichier. Notez seulement que le nom de fichier est codé en dur dans le swap. En tant que tel, vous ne pouvez pas dire:

cp .foo.txt.swp .bar.txt.swp

et

vim bar.txt

et attendez le fichier d'échange de foo.txt.

Si vous êtes très intéressé, vous pouvez faire (sur * nix):

xxd -s 108 -l 800 -ps .foo.txt.swp | xxd -r -p

pour obtenir le chemin (avec quelques bizarreries) du fichier d'origine. Comme vous le verrez, le chemin complet est ajouté, par exemple:

~user/blah/blah/notes.txt

mais seul le nom de base est utilisé lors de la vérification du swap.

À cet égard, vous pouvez également consulter l' vim -roption - qui répertorie les fichiers d'échange dans les répertoires actuels et inférieurs. Voir :h crash-recoveryavec des sous-thèmes.

Runium
la source
0

Pour moi, c'est bien d'enregistrer le tampon chaque fois que le texte est modifié:

autocmd TextChanged,TextChangedI <buffer> silent write

Je l'ai trouvé ici . Ça marche pour moi.

simhumileco
la source