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?
fonte
I created a file named fizzbuzz.java
você a criou manualmente no seu explorador ou foi usada:e fizzbuzz.java
?After closing the file
você quer dizer fechar o bufferfizzbuzz.java
com:bd
?I had to rename it to FizzBuzz.java
no seu explorador, não com:saveas
?it reverts to the original casing, and saves it as such
onde você o vê com o nome original?so that I had to rename the file again
novamente como você renomeou?refreshing the buffer list in the menu
qual menu?:f %
.Respostas:
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:ls
comando 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.java
eFizzBuzz.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
:bwipeout
comando 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
:bwipeout
tem 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:fonte
Feche o vim completamente e reabra o arquivo manualmente (ou seja, em
:edit FileName.ext
vez 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.fonte
lowercase.cpp
e deseja abrirLowerCase.cpp
. Provavelmente é um bug, mas é a mesma solução.