Lors de l'édition du code source à l'aide de gvim (v.7.4.488), je veux valider certaines modifications du vcs (j'utilise git 2.1.4 à partir de la ligne de commande dans Ubuntu linux).
git --status
montre quels fichiers j'ai modifiés. Cependant, il montre également le vim .*.swp
des tampons actuellement visibles (à la fois si le fichier contient des modifications non enregistrées et lorsque le fichier modifié est le même que le .*.swp
fichier). Bien entendu, git peut ignorer ces fichiers ou vim peut stocker les fichiers d'échange dans un emplacement différent (voir vim.wikia ou cette question sur stackoverflow ). Mais j'aime les .*.swp
fichiers qui apparaissent git --status
lorsqu'ils contiennent des modifications non enregistrées, car cela me signale que je valide des fichiers dans un état différent de celui dans lequel je pense qu'ils se trouvent.
Comment puis-je éviter que les faux positifs des .*.swp
fichiers s'affichent git --status
lorsque le fichier enregistré est le même que le .*.swp
fichier, tout en étant en mesure de voir que le fichier à valider est dans un état différent de celui que je modifie avec vim?
- Est-il possible d'avoir uniquement des
.*.swp
fichiers-lorsque le fichier sur le disque et le fichier dans vim sont différents? - Existe-t-il un autre moyen de détecter les fichiers non enregistrés?
La combinaison des commentaires de @elyashiv et @VanLaser résulte en une méthode plus simple que de détecter si les fichiers d'échange impliquent des fichiers non enregistrés:
- ne laissez pas git ignorer les fichiers. *. sw [po];
- lors
git --status
de la.*.sw[po]
validation , si révèle des fichiers, faites un:wa
in vi; et, - ajouter et valider.
:wa
pour vous assurer qu'il n'y a pas de fichiers non enregistrés.git commit
...Réponses:
vim -r
sur la ligne de commande répertorie tous les fichiers d'échange dans le répertoire en cours et les répertoires temporaires, et s'ils contiennent des modifications non enregistrées. Recherchez la ligne qui ditmodified: no/YES
.Je ne sais pas comment dire à Vim de chercher dans un répertoire différent, vous devrez donc passer à chaque répertoire contenant un fichier d'échange et l'exécuter
vim -r
. Vous pouvez proposer un script qui analyse la sortie degit status
, ou qui est utiliséfind -name '.*.sw[po]'
, puis qui s'exécutevim -r
dans chaque répertoire, pour afficher tous les fichiers d'échange avec les modifications non enregistrées.(J'utilise à la
.*.sw[po]
place de.*.swp
, car parfois des.swo
fichiers sont créés en plus des.swp
fichiers, lorsque vous modifiez un fichier qui a déjà un fichier d'échange. Des.swn
fichiers peuvent également être créés si vous modifiez un fichier avec deux fichiers d'échange existants, mais je ne pense pas J'en ai déjà vu un dans la nature. Si vous êtes vraiment paranoïaque, vous pouvez utiliser.*.sw[a-p]
ou simplement.*.sw?
.)Voir
:help -r
pour (un peu) plus d'informations sur l'-r
option, ou:help recover.txt
pour plus d'informations sur la récupération et l'échange de noms de fichiers.la source
.
du nom de fichier), de sorte que le bon schéma serait.*.sw[a-p]
(bien que dans les cas pathologiques, vous puissiez réellement arriver à la fin.foo.saa
). Cela devrait également empêcher les fichiers Flash correspondants, car je doute que ce soit généralement un fichier caché..
est requis dans un glob de shell, mais*.swp
fonctionne comme un argument pourfind
. Mais le leader.
rend les choses plus simples. Merci!Oui. L'extrait ci-dessous (adapté du vimrc de tpope ) désactivera le fichier d'échange pour un tampon lorsqu'il n'est pas modifié, donc les fichiers d'échange n'existent que pour les fichiers modifiés.
Avertissement : étant donné que le fichier d'échange n'existe que lorsque le tampon est modifié, vous perdez l'utilisation du fichier d'échange comme verrou consultatif. Si le tampon n'est pas modifié, un autre Vim peut commencer à le modifier sans remarquer qu'il est déjà ouvert. Si le deuxième Vim enregistre avant que le premier n'effectue plus de modifications, alors elles ne seront pas remarquées jusqu'à ce que l'utilisateur essaie d'enregistrer ou quelque chose déclenche Vim pour vérifier si le fichier est modifié.
la source