Tratamiento de nombres de archivo que no distinguen entre mayúsculas y minúsculas en Windows


8

Estoy usando el último vim / gvim (8.0.118), pero he notado este problema en el pasado, con otras versiones.

Creé un archivo llamado fizzbuzz.java(fuera de gvim) y lo abrí en una nueva pestaña en gvim en mi PC con Windows 7 en el trabajo, usando el menú contextual de mi administrador de archivos. Después de cerrar la pestaña, usando :x, descubrí que tenía que cambiar el nombre del archivo para FizzBuzz.javaque coincida con el nombre de la clase que escribí, lo que hice fuera de gvim.

Sin embargo, cuando fui a volver a abrirlo en la misma instancia de gvim, nuevamente usando el menú contextual de mi administrador de archivos, vuelve a la carcasa original, y cuando lo cierro :x, lo guarda como tal, así que tuve que cambie el nombre del archivo nuevamente. Fue solo después de eliminar el búfer y actualizar la lista de búfer en el menú que pude hacer que gvim reconociera correctamente la nueva carcasa del nombre de archivo.

Esto no sucede en gvim 7.4 en Linux (PCLinuxOS)

¿Hay una manera más fácil de hacer que gvim reconozca y retenga el cambio en la carcasa de un nombre de archivo en Windows, sin reiniciar gvim?


1
No puedo reproducir su problema, pero su redacción no es precisa, por lo que podría estar perdiendo algo: I created a file named fizzbuzz.java¿lo creó manualmente en su explorador o lo usó :e fizzbuzz.java? After closing the file¿te refieres a cerrar el búfer fizzbuzz.javacon :bd? I had to rename it to FizzBuzz.javaen tu explorador, no con :saveas? it reverts to the original casing, and saves it as such¿Dónde lo ves con el nombre original? so that I had to rename the file againde nuevo, ¿cómo le cambiaste el nombre? refreshing the buffer list in the menucual menu?
statox

Se actualizó la pregunta para agregar respuestas a sus preguntas. Creado y renombrado el archivo fuera de gvim. La carcasa original se muestra en la barra de estado cuando vuelvo a abrir el archivo en gvim usando mi administrador de archivos.
Herb Wolfe

Gracias por la edición Siguiendo su flujo de trabajo, todavía no puedo reproducir este problema. Creo que es un comportamiento extraño ya que el sistema operativo maneja completamente el nombre de archivo ... Espero que alguien pueda ayudarlo :)
statox

2
Sí, vim parece reutilizar el nombre original ya que recuerda el búfer. Como solución, intente :f %.
Antony

@Antony si quieres agregar eso como respuesta, lo aceptaré.
Herb Wolfe

Respuestas:


1

Por que sucede esto

Cuando cierra el archivo con :x, guarda el búfer y cierra la ventana / pestaña, pero Vim no se olvida del archivo. Si ejecuta el :lscomando después de hacerlo, verá que el búfer todavía está allí.

Luego, cuando vuelva a abrir el archivo, Vim notará que ya tiene un búfer con el "mismo" nombre de archivo (porque su sistema de archivos conserva las mayúsculas y minúsculas, fizzbuzz.javay FizzBuzz.javason equivalentes con respecto a la identidad del archivo), y reutilice el búfer, con el nombre del archivo en minúsculas.

La solución

Para evitar esto, en lugar de simplemente cerrar la ventana, debe decirle a Vim que descarte el búfer por completo, utilizando el :bwipeoutcomando. Esto elimina completamente el búfer de Vim, por lo que cuando lo vuelve a abrir, lo trata como un búfer completamente nuevo y utiliza el nombre de archivo en mayúsculas del sistema de archivos.

Una solución alternativa

Tenga en cuenta que :bwipeouttiene algunos otros efectos . Si se trata de un problema, puede utilizar la solución sugerida por Antony en los comentarios , que es permitir que Vim abra el archivo con el nombre del archivo en minúsculas, pero luego cambie el nombre del búfer para que coincida con el nombre en mayúsculas :file {name}mando:

:f %

0

Cierre vim completamente y vuelva a abrir el archivo manualmente (es decir, en :edit FileName.extlugar de :MRU), asegurándose de que no haya nombres mal escritos en la ruta.

Acabo de resolver un problema similar en el que mi nombre de archivo en vim estaba en minúsculas, pero la ruta real estaba en mayúsculas, y Fugitive no pudo encontrar el archivo en minúsculas por alguna razón. Parecía persistir incluso después de relanzar vim y abrir el archivo.

El problema era en realidad que el complemento MRU que estaba usando (CtrlP) había logrado almacenar el nombre de archivo en minúsculas, así que después de reiniciar vim, cuando escribí manualmente :e UpperCaseFileName.type, en lugar de pasar por el archivo MRU a través de un complemento, usó la ruta correcta.


No estoy usando un complemento MRU. Parece que es un problema de búfer interno.
Herb Wolfe

Es el mismo problema, has abierto el archivo lowercase.cppy quieres abrirlo LowerCase.cpp. Probablemente sea un error, pero es la misma solución.
TankorSmash
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.