Lidando com nomes de arquivos que não diferenciam maiúsculas de minúsculas no Windows


8

Estou usando o vim / gvim (8.0.118) mais recente, mas notei esse problema no passado, com outras versões.

Criei um arquivo chamado fizzbuzz.java(fora do gvim) e o abri em uma nova guia no gvim no meu PC com Windows 7 no trabalho, usando o menu de contexto do meu gerenciador de arquivos. Depois de fechar a guia, usando :x, descobri que tinha que renomear o arquivo para FizzBuzz.java, para corresponder ao nome da classe que escrevi, o que fiz fora do gvim.

No entanto, quando fui reabri-lo na mesma instância do gvim, novamente usando o menu de contexto do meu gerenciador de arquivos, ele reverte para a caixa original e, quando eu a fecho :x, ela salva como tal, para que eu tivesse que renomeie o arquivo novamente. Foi somente após excluir o buffer e atualizar a lista de buffers no menu que consegui que o gvim reconhecesse corretamente a nova caixa do nome do arquivo.

Isso não acontece no gvim 7.4 no Linux (PCLinuxOS)

Existe uma maneira mais fácil de fazer com que o gvim reconheça e retenha a alteração na caixa de um nome de arquivo no Windows, sem reiniciar o gvim?


1
Não consigo reproduzir o seu problema, mas sua redação não é precisa, portanto, posso estar entendendo algo: I created a file named fizzbuzz.javavocê a criou manualmente no seu explorador ou foi usada :e fizzbuzz.java? After closing the filevocê quer dizer fechar o buffer fizzbuzz.javacom :bd? I had to rename it to FizzBuzz.javano seu explorador, não com :saveas? it reverts to the original casing, and saves it as suchonde você o vê com o nome original? so that I had to rename the file againnovamente como você renomeou? refreshing the buffer list in the menuqual menu?
Statox

Atualizou a pergunta para adicionar respostas às suas perguntas. Criou e renomeou o arquivo fora do gvim. A caixa original é exibida na barra de status quando reabra o arquivo no gvim usando meu gerenciador de arquivos.
Herb Wolfe

Obrigado pela edição. Após o seu fluxo de trabalho, ainda não consigo reproduzir esse problema. Eu acho que é um comportamento estranho, já que o nome do arquivo é completamente manipulada pelo OS ... Espero que alguém será capaz de ajudá-lo :)
statox

2
Sim, o vim parece reutilizar o nome original, pois ele se lembra do buffer. Como solução alternativa, tente :f %.
Antony

@Antony, se você quiser adicionar isso como resposta, eu aceito.
Herb Wolfe

Respostas:


1

Por que isso acontece

Quando você fecha o arquivo :x, ele salva o buffer e fecha a janela / guia, mas o Vim não esquece o arquivo. Se você executar o :lscomando depois de fazer isso, verá que o buffer ainda está lá.

Então, quando você reabrir o arquivo, o Vim notará que ele já possui um buffer com o "mesmo" nome de arquivo (porque seu sistema de arquivos preserva maiúsculas e minúsculas fizzbuzz.javae FizzBuzz.javaé sensível a maiúsculas e minúsculas e é equivalente em relação à identidade do arquivo), e reutilize o buffer, com o nome do arquivo em minúsculas.

A solução

Para evitar isso, em vez de simplesmente fechar a janela, você precisa dizer ao Vim para descartar completamente o buffer usando o :bwipeoutcomando Isso remove completamente o buffer do Vim; portanto, quando você o reabre, ele é tratado como um buffer totalmente novo e usa o nome do arquivo em maiúsculas no sistema de arquivos.

Uma solução alternativa

Note que :bwipeouttem alguns outros efeitos . Se esse é um problema, você pode usar a solução alternativa sugerida por Antony nos comentários , que é para permitir que o Vim abra o arquivo usando o nome de arquivo em minúsculas, mas renomeie o buffer para corresponder ao nome em maiúsculas com o :file {name}comando:

:f %

0

Feche o vim completamente e reabra o arquivo manualmente (ou seja, em :edit FileName.extvez de :MRU), garantindo que não haja nomes com erros de maiúsculas e minúsculas no caminho.

Acabei de solucionar um problema semelhante em que meu nome de arquivo no vim estava em minúsculas, mas o caminho real estava em maiúsculas, e o Fugitive não conseguiu encontrar o arquivo em minúsculas por qualquer motivo. Pareceu persistir mesmo depois que eu relancei o vim e abri o arquivo.

O problema era que o plug-in MRU que eu estava usando (CtrlP) conseguiu armazenar o nome do arquivo em minúsculas; portanto, após reiniciar o vim, quando eu digitei manualmente :e UpperCaseFileName.type, em vez de passar pelo arquivo MRU por meio de um plug-in, ele usou o caminho correto.


Não estou usando um plug-in MRU. Parece que é um problema de buffer interno.
Herb Wolfe

É o mesmo problema, você abriu o arquivo lowercase.cppe deseja abrir LowerCase.cpp. Provavelmente é um bug, mas é a mesma solução.
TankorSmash
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.