Gestione di nomi di file senza distinzione tra maiuscole e minuscole su Windows


8

Sto usando l'ultimo vim / gvim (8.0.118), ma ho notato questo problema in passato, con altre versioni.

Ho creato un file chiamato fizzbuzz.java(al di fuori di gvim) e l'ho aperto in una nuova scheda in gvim sul mio PC Windows 7 al lavoro, utilizzando il menu di scelta rapida del mio file manager. Dopo aver chiuso la scheda, usando :x, ho scoperto che dovevo rinominare il file FizzBuzz.java, in modo che corrispondesse al nome della classe che ho scritto, cosa che ho fatto al di fuori di gvim.

Tuttavia, quando sono andato a riaprirlo nella stessa istanza di gvim, usando di nuovo il menu di scelta rapida del mio file manager, ritorna al case originale e, quando lo chiudo con :x, lo salva come tale, quindi ho dovuto rinominare nuovamente il file. È stato solo dopo aver eliminato il buffer e aver aggiornato l'elenco dei buffer nel menu che sono stato in grado di ottenere gvim per riconoscere correttamente il nuovo involucro del nome file.

Questo non succede in gvim 7.4 su Linux (PCLinuxOS)

Esiste un modo più semplice per far riconoscere gvim e conservare la modifica nel case di un nome file su Windows, senza riavviare gvim?


1
Non riesco a riprodurre il tuo problema, ma la tua formulazione non è precisa, quindi potrei sbagliare qualcosa: l' I created a file named fizzbuzz.javahai creato manualmente nel tuo esploratore o usato :e fizzbuzz.java? After closing the filevuoi dire chiudere il buffer fizzbuzz.javacon :bd? I had to rename it to FizzBuzz.javanel tuo esploratore, non con :saveas? it reverts to the original casing, and saves it as suchdove lo vedi con il nome originale? so that I had to rename the file againdi nuovo come lo hai rinominato? refreshing the buffer list in the menuquale menu?
statox

Aggiornata la domanda per aggiungere risposte alle tue domande. Creato e rinominato il file al di fuori di gvim. L'involucro originale viene visualizzato nella barra di stato quando riapro il file in gvim usando il mio file manager.
Herb Wolfe,

Grazie per la modifica. A seguito del tuo flusso di lavoro, non riesco ancora a riprodurre questo problema. Penso che sia un comportamento strano poiché il nome del file è completamente gestito dal sistema operativo ... Spero che qualcuno sarà in grado di aiutarti :)
statox

2
Sì, vim sembra riutilizzare il nome originale poiché ricorda il buffer. Per ovviare al problema, provare :f %.
Antony,

@Antony se vuoi aggiungerlo come risposta, lo accetterò.
Herb Wolfe,

Risposte:


1

Perché questo succede

Quando chiudi il file con :x, salva il buffer e chiude la finestra / scheda, ma Vim non dimentica il file. Se esegui il :lscomando dopo averlo fatto, vedrai che il buffer è ancora lì.

Quindi, quando riapri il file, Vim noterà che ha già un buffer con lo "stesso" nome di file (perché il tuo file system mantiene la distinzione tra maiuscole e minuscole ma non fa distinzione tra maiuscole e minuscole fizzbuzz.javae FizzBuzz.javasono equivalenti rispetto all'identità del file), e riutilizzare il buffer, con il nome del file in minuscolo.

La soluzione

Per evitare ciò, invece di chiudere semplicemente la finestra, devi dire a Vim di scartare del tutto il buffer, usando il :bwipeoutcomando. Questo rimuove completamente il buffer da Vim, e quindi quando lo riapri, lo tratta come un buffer completamente nuovo e usa il nome del file in maiuscolo dal filesystem.

Una soluzione alternativa

Nota che :bwipeoutha alcuni altri effetti . Se si tratta di un problema, puoi invece utilizzare la soluzione suggerita da Antony nei commenti , che consente a Vim di aprire il file utilizzando il nome del file in minuscolo, ma quindi rinominare il buffer in modo che corrisponda al nome in maiuscolo con :file {name}comando:

:f %

0

Chiudi vim completamente e riapri il file manualmente (cioè :edit FileName.extinvece di :MRU), assicurandoti che non ci siano nomi con caratteri errati nel percorso.

Ho appena risolto un problema simile in cui il mio nome file in VIM era in minuscolo, ma il percorso effettivo era in maiuscolo e Fugitive non riusciva a trovare il file in minuscolo per qualsiasi motivo. Sembrava persistere anche dopo aver riavviato Vim e aperto il file.

Il problema era in realtà che il plug-in MRU che stavo usando (CtrlP) era riuscito a memorizzare il nome file minuscolo, quindi dopo aver riavviato vim, quando ho digitato manualmente :e UpperCaseFileName.type, invece di passare attraverso il file MRU tramite un plug-in, ha usato il percorso corretto.


Non sto usando un plugin MRU. Sembra che si tratti di un problema di buffer interno.
Herb Wolfe,

È lo stesso problema, hai aperto il file lowercase.cppe vuoi aprirlo LowerCase.cpp. Probabilmente è un bug ma è la stessa soluzione.
TankorSmash,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.