53 votes

Changer le nom du fichier swap/backup/undo de Vim

Est-il possible de changer la façon dont Vim nomme ses fichiers swap/backup/undo ?

Pour éviter le désordre, j'ai défini des options dans mon fichier ~/.vimrc pour vider ces fichiers dans ~/.vim/tmp/{swap,backup,undo} Cependant, comme je modifie régulièrement des fichiers dans différents répertoires portant le même nom, je me retrouve souvent avec de nombreux fichiers indiscernables et Vim a parfois du mal à les récupérer.

Idéalement, j'aimerais utiliser le schéma de dénomination de l'annulation persistante ( %path%to%file.undo ) pour tous ces fichiers auxiliaires ; il n'y a pas de moyen évident de le définir, mais cela peut être fait avec Buf{Read,Write} macros ?

70voto

John Kugelman Points 108754

J'ai ceci dans mon .vimrc et il nomme les fichiers d'échange avec des noms de chemin complets et des signes de pourcentage, comme vous le décrivez :

" Store swap files in fixed location, not current directory.
set dir=~/.vimswap//,/var/tmp//,/tmp//,.

La clé est le // à la fin des répertoires. Voir cette note de :help dir :

  • Pour Unix et Win32, si un répertoire se termine par deux séparateurs de chemin d'accès "//" ou "\\" le nom du fichier d'échange sera construit à partir du chemin d'accès complet au fichier avec tous les séparateurs de chemin soustraits. du fichier avec tous les séparateurs de chemin remplacés par des pourcentages '%'. Cela garantit l'unicité du nom de fichier dans le répertoire de préservation.

64voto

The Doctor What Points 4454

Voici une partie de mon .vimrc de github .

Cela permet de définir le undodir (et l'allume), définit le backupdir y directory (utilisé pour .swp fichiers). Notez qu'il crée les répertoires s'ils n'existent pas déjà.

" Save your backups to a less annoying place than the current directory.
" If you have .vim-backup in the current directory, it'll use that.
" Otherwise it saves it to ~/.vim/backup or . if all else fails.
if isdirectory($HOME . '/.vim/backup') == 0
  :silent !mkdir -p ~/.vim/backup >/dev/null 2>&1
endif
set backupdir-=.
set backupdir+=.
set backupdir-=~/
set backupdir^=~/.vim/backup/
set backupdir^=./.vim-backup/
set backup

" Save your swp files to a less annoying place than the current directory.
" If you have .vim-swap in the current directory, it'll use that.
" Otherwise it saves it to ~/.vim/swap, ~/tmp or .
if isdirectory($HOME . '/.vim/swap') == 0
  :silent !mkdir -p ~/.vim/swap >/dev/null 2>&1
endif
set directory=./.vim-swap//
set directory+=~/.vim/swap//
set directory+=~/tmp//
set directory+=.

" viminfo stores the the state of your previous editing session
set viminfo+=n~/.vim/viminfo

if exists("+undofile")
  " undofile - This allows you to use undos after exiting and restarting
  " This, like swap and backups, uses .vim-undo first, then ~/.vim/undo
  " :help undo-persistence
  " This is only present in 7.3+
  if isdirectory($HOME . '/.vim/undo') == 0
    :silent !mkdir -p ~/.vim/undo > /dev/null 2>&1
  endif
  set undodir=./.vim-undo//
  set undodir+=~/.vim/undo//
  set undofile
endif

J'espère qu'il est suffisamment bien commenté pour que vous compreniez ce qui se passe. Si ce n'est pas le cas, ajoutez un commentaire et je le corrigerai.

Ciao !

Mise à jour [16/07/2012]

J'ai reçu un courriel de Rob Kine posant ces questions sur le backupdir que je voulais répondre pour tout le monde :

  1. il semble que vous supprimez le répertoire actuel, puis que vous le réinsérez. à quoi cela sert-il ?
  2. que fait le ^= l'opérateur fait ?
  3. comment fonctionne l'ordre de préséance dans l'utilisation des dossiers vérifiés dans vim ? (par exemple, le dernier dossier ajouté est-il le premier à être vérifié ?)

La première chose à faire est de décrire les différents opérateurs. Ces opérateurs ont des significations différentes pour les options qui ne sont pas des listes de chaînes de caractères, alors soyez avertis !

  • -= supprime la valeur d'une liste de chaînes.
  • .= ajoute la valeur à une liste de chaînes.
  • ^= ajoute la valeur à une liste de chaînes.

Ainsi, le backupdir a les opérations suivantes appliquées :

  1. Supprime le répertoire courant de la liste.
  2. Ajoute le répertoire courant à la liste (ceci assure qu'il est la dernière chose vérifiée).
  3. Supprimez le répertoire personnel de la liste (je n'aime pas que des choses y soient enregistrées).
  4. Préparez ~/.vim/backup/
  5. Préparez ~/.vim-backup/

Lorsque vim recherche l'endroit où enregistrer les sauvegardes, il vérifie de la première à la dernière ; il vérifiera donc les éléments suivants ~/.vim-backup/ puis vérifiez que ~/.vim/backup puis vérifiez la liste par défaut (sauf pour . y ~/ qui ont été supprimés), puis vérifiez .

Vous pouvez obtenir de l'aide pour tout cela dans vim en utilisant (par exemple) :help ^= o :help backupdir .

2voto

juque Points 93

Créer le répertoire undo

 $ mkdir ~/.vimundo

Configurez votre fichier .vimrc

 set undodir=~/.vimundo

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X