Gérer les noms de fichiers insensibles à la casse sous Windows

8

J'utilise la dernière version de vim / gvim (8.0.118), mais j'ai remarqué ce problème dans le passé, avec d'autres versions.

J'ai créé un fichier nommé fizzbuzz.java(en dehors de gvim) et l' ai ouvert dans un nouvel onglet dans gvim sur mon PC Windows 7 au travail, en utilisant le menu contextuel de mon gestionnaire de fichiers. Après avoir fermé l'onglet, en utilisant :x, j'ai découvert que je devais renommer le fichier FizzBuzz.javapour correspondre au nom de la classe que j'ai écrite, ce que j'ai fait en dehors de gvim.

Cependant, lorsque je suis allé le rouvrir dans la même instance de gvim, en utilisant à nouveau le menu contextuel de mon gestionnaire de fichiers, il revient à la casse d'origine, et quand je le ferme avec :x, il l'enregistre comme tel, de sorte que j'ai dû renommer à nouveau le fichier. Ce n'est qu'après avoir supprimé le tampon et actualisé la liste des tampons dans le menu que j'ai pu obtenir que gvim reconnaisse correctement le nouveau boîtier du nom de fichier.

Cela ne se produit pas dans gvim 7.4 sous Linux (PCLinuxOS)

Existe-t-il un moyen plus simple pour que gvim reconnaisse et conserve le changement de casse d'un nom de fichier sous Windows, sans redémarrer gvim?

Herb Wolfe
la source
1
Je ne peux pas reproduire votre problème, mais votre formulation n'est pas précise, donc je peux me tromper: I created a file named fizzbuzz.javavous l'avez créé manuellement dans votre explorateur ou utilisé :e fizzbuzz.java? After closing the filevoulez-vous dire la fermeture du tampon fizzbuzz.javaavec :bd? I had to rename it to FizzBuzz.javadans votre explorateur, pas avec :saveas? it reverts to the original casing, and saves it as suchoù le voyez-vous avec le nom d'origine? so that I had to rename the file againencore comment l'avez-vous renommé? refreshing the buffer list in the menuquel menu?
statox
Mise à jour de la question pour ajouter des réponses à vos questions. Créé et renommé le fichier en dehors de gvim. Le boîtier d'origine s'affiche dans la barre d'état lorsque je rouvre le fichier dans gvim à l'aide de mon gestionnaire de fichiers.
Herb Wolfe
Merci pour la retouche. Suite à votre workflow, je ne peux toujours pas reproduire ce problème. Je pense que c'est un comportement étrange car le nom de fichier est complètement géré par le système d'exploitation ... J'espère que quelqu'un pourra vous aider :)
statox
2
Oui, vim semble réutiliser le nom d'origine car il se souvient du tampon. Pour contourner ce problème, essayez :f %.
Antony
@Antony si vous voulez ajouter cela comme réponse, je l'accepterai.
Herb Wolfe

Réponses:

1

Pourquoi cela se produit

Lorsque vous fermez le fichier avec :x, il enregistre le tampon et ferme la fenêtre / l'onglet, mais Vim n'oublie pas le fichier. Si vous exécutez la :lscommande après l'avoir fait, vous verrez que le tampon est toujours là.

Ensuite, lorsque vous rouvrez le fichier, Vim remarquera qu'il a déjà un tampon avec le "même" nom de fichier (car votre système de fichiers respecte la casse fizzbuzz.javamais FizzBuzz.javane respecte pas la casse et est équivalent en ce qui concerne l'identité du fichier), et réutiliser le tampon, avec le nom de fichier en minuscule.

La solution

Pour éviter cela, au lieu de simplement fermer la fenêtre, vous devez dire à Vim de supprimer complètement le tampon, en utilisant la :bwipeoutcommande. Cela supprime complètement le tampon de Vim, et donc lorsque vous le rouvrez, il le traite comme un tout nouveau tampon et utilise le nom de fichier en majuscule du système de fichiers.

Une solution alternative

Notez que cela :bwipeouta d' autres effets . S'il s'agit d'un problème, vous pouvez utiliser à la place la solution de contournement suggérée par Antony dans les commentaires , qui est d'autoriser Vim à ouvrir le fichier en utilisant le nom de fichier en minuscule, puis de renommer le tampon pour faire correspondre le nom en majuscule avec le :file {name}commander:

:f %
Riches
la source
0

Fermez complètement vim et rouvrez le fichier manuellement (c'est- :edit FileName.extà- dire au lieu de :MRU), en vous assurant qu'il n'y a pas de noms mal placés dans le chemin.

Je viens de résoudre un problème similaire où mon nom de fichier dans vim était en minuscule, mais le chemin réel était en majuscule et Fugitive n'a pas pu trouver le fichier en minuscule pour une raison quelconque. Il semblait persister même après avoir relancé vim et ouvert le fichier.

Le problème était en fait que le plug-in MRU que j'utilisais (CtrlP) avait réussi à stocker le nom de fichier en minuscules, donc après avoir redémarré vim, lorsque j'ai tapé manuellement :e UpperCaseFileName.type, au lieu de parcourir le fichier MRU via un plug-in, il a utilisé le chemin correct.

TankorSmash
la source
Je n'utilise pas de plugin MRU. Il semble que ce soit un problème de tampon interne.
Herb Wolfe
C'est le même problème, vous avez ouvert le fichier lowercase.cppet souhaitez l'ouvrir LowerCase.cpp. C'est probablement un bug mais c'est la même solution.
TankorSmash