L'une des nouvelles fonctionnalités de Vim 7.3 est «l'annulation persistante», qui permet d'enregistrer l'annulation dans un fichier lors de la sortie d'un tampon.
Malheureusement, je n'ai pas tout à fait été en mesure de l'activer correctement, ou je dois l'utiliser mal. Voici ce que j'ai essayé jusqu'à présent:
J'ai ajouté ce qui suit à ~ / .vimrc
set undofile " Save undos after file closes
set undodir=$HOME/.vim/undo " where to save undo histories
set undolevels=1000 " How many undos
set undoreload=10000 " number of lines to save for undo
Après cela, je devrais être en mesure d'ouvrir n'importe quel fichier, de le modifier, puis de le sauvegarder-le fermer, et lorsque je l'ouvrirai à nouveau, je devrais pouvoir annuler / refaire comme si je n'avais jamais quitté. Malheureusement, cela ne semble pas être le cas, car aucune annulation n'est jamais écrite.
Remarques:
Je suis sur Win 7 en utilisant Vim 7.3 du projet Vim sans crème. Une annulation persistante est intégrée.
$ HOME / .vim / undo existe sur mon système de fichiers
mkdir ~/.vim/undo
Réponses:
Mettez-le dans votre
.vimrc
pour créer unundodir
s'il n'existe pas et activer l'annulation persistante. Testé sur Windows et Linux.la source
:silent call system('mkdir -p ' . &undodir)
&
parce que jeset
la teinteundodir
plutôt que de lalet
teinter. (Dans mon esprit, cette distinction entrelet
etset
est l'une des nombreuses, nombreuses, nombreuses "fonctionnalités" ahurissantes de Vimscript, mais YMMV.).vim
si ça n'existe pas. Malheureusement, l'-p
indicateur n'existe pas sous Windows, j'ai donc modifié la réponse pour appelermkdir
deux fois pour assurer la compatibilité Windows.-p
indicateur est en fait d'éviter une erreur lorsque le répertoire existe. J'ai ma commande dans unif has('win32')
bloc, donc je l'utilise simplementmkdir
sans-p
sous Windows.mkdir()
? Alors cela peut devenircall mkdir(myUndoDir, 'p')
:, qui se comporte commemkdir -p
.J'ai essayé ceci dans mon _gvimrc:
Cela a commencé à fonctionner comme annoncé lorsque j'ai supprimé le crochet try-catch, ainsi:
J'ai dû créer le répertoire.
la source
if has('persistent_undo')
silent !mkdir ~/.config/nvim/backups > /dev/null 2>&1
set undodir=~/.config/nvim/backups
endif
"Ajout d'un message commenté pour augmenter la longueur du messageJe suppose que $ HOME ne fonctionne pas comme annoncé.
Sur mon système,
:echo $HOME
affiche H: \, mais: e $HOME/
dit:~/
nom de fichier invalide.Vous pouvez essayer avec un chemin absolu pour voir si cela le guérit
la source
$TEMP
. Quand je regardeset undodir?
ça se voit~/AppData/Local/Temp
. Le fichier d'annulation est conservé et se charge correctement. Peut$TEMP
-être sera - t - il plus fiable?Cela fonctionne maintenant comme prévu:
file.txt
ouvrez dans un tampon Vim 7.4 sur Windows 7,:setlocal undofile
puis enregistrez une modification dans le tampon, et l'annulation du fichier.file.txt.un~
est créée à côté car:set undodir?
signale que "undodir =". par défaut - c'est-à-dire pas besoin de le spécifier manuellement. Vous pouvez également:set undofile
dans une modeline.la source