Ich verwende das neueste vim / gvim (8.0.118), habe dieses Problem jedoch in der Vergangenheit bei anderen Versionen festgestellt.
Ich habe eine Datei mit dem Namen fizzbuzz.java
(außerhalb von gvim) erstellt und sie in einem neuen Tab in gvim auf meinem Windows 7-PC bei der Arbeit über das Kontextmenü meines Dateimanagers geöffnet. Nachdem :x
ich die Registerkarte mit geschlossen hatte , stellte ich fest, dass ich die Datei umbenennen musste FizzBuzz.java
, um mit dem Namen der Klasse übereinzustimmen, die ich außerhalb von gvim geschrieben hatte.
Wenn ich es jedoch in derselben Instanz von gvim erneut öffnete und wieder das Kontextmenü meines Dateimanagers verwendete, wurde das ursprüngliche Gehäuse wiederhergestellt, und wenn ich es mit schließe :x
, wird es als solches gespeichert , sodass ich es musste Benennen Sie die Datei erneut um. Erst nachdem ich den Puffer gelöscht und die Pufferliste im Menü aktualisiert hatte, konnte ich gvim veranlassen, das neue Gehäuse des Dateinamens korrekt zu erkennen.
Dies ist in gvim 7.4 unter Linux (PCLinuxOS) nicht der Fall.
Gibt es eine einfachere Möglichkeit, gvim zu erkennen und die Änderung des Gehäuses eines Dateinamens unter Windows beizubehalten, ohne gvim neu zu starten?
quelle
I created a file named fizzbuzz.java
Sie haben es manuell in Ihrem Explorer erstellt oder verwendet:e fizzbuzz.java
?After closing the file
Meinst du das Schließen des Puffersfizzbuzz.java
mit:bd
?I had to rename it to FizzBuzz.java
in deinem Entdecker, nicht mit:saveas
?it reverts to the original casing, and saves it as such
wo siehst du es mit dem ursprünglichen Namen?so that I had to rename the file again
Wie hast du es wieder umbenannt?refreshing the buffer list in the menu
Welches Menü?:f %
.Antworten:
Warum passiert das?
Wenn Sie die Datei mit schließen
:x
, speichert es die Puffer und schließt das Fenster / Tab, aber Vim ist nicht über die Datei vergessen. Wenn Sie den:ls
Befehl danach ausführen , sehen Sie, dass der Puffer noch vorhanden ist.Wenn Sie die Datei dann erneut öffnen, wird Vim feststellen, dass sie bereits einen Puffer mit dem "gleichen" Dateinamen enthält (da Ihr Dateisystem die Groß- und Kleinschreibung bewahrt, die Groß- und Kleinschreibung nicht berücksichtigt
fizzbuzz.java
undFizzBuzz.java
in Bezug auf die Identität der Datei gleichwertig ist). und verwenden Sie den Puffer mit dem Dateinamen in Kleinbuchstaben erneut.Die Lösung
Um dies zu verhindern, müssen Sie Vim anweisen, den Puffer mithilfe des
:bwipeout
Befehls vollständig zu verwerfen, anstatt nur das Fenster zu schließen . Dadurch wird der Puffer vollständig aus Vim entfernt. Wenn Sie ihn erneut öffnen, wird er als völlig neuer Puffer behandelt und der Dateiname in Großbuchstaben aus dem Dateisystem verwendet.Eine alternative Problemumgehung
Beachten Sie, dass
:bwipeout
hat einige andere Effekte . Wenn dies ein Problem darstellt, können Sie stattdessen die von Antony in den Kommentaren vorgeschlagene Problemumgehung verwenden , mit der Vim die Datei mit dem Dateinamen in Kleinbuchstaben öffnen und den Puffer dann umbenennen kann, um den Namen in Großbuchstaben mit dem Namen abzugleichen:file {name}
Befehl:quelle
Schließen Sie vim vollständig und öffnen Sie die Datei manuell (dh
:edit FileName.ext
anstelle von:MRU
), um sicherzustellen, dass der Pfad keine falsch umhüllten Namen enthält.Ich habe gerade ein ähnliches Problem gelöst, bei dem mein Dateiname in vim in Kleinbuchstaben geschrieben war, der tatsächliche Pfad jedoch in Großbuchstaben geschrieben war und Fugitive die Datei in Kleinbuchstaben aus irgendeinem Grund nicht finden konnte. Es schien zu bestehen, selbst nachdem ich vim neu gestartet und die Datei geöffnet hatte.
Das Problem war tatsächlich, dass das von mir verwendete MRU-Plugin (CtrlP) es geschafft hatte, den Dateinamen in Kleinbuchstaben zu speichern. Nach dem Neustart von vim verwendete ich bei der manuellen Eingabe
:e UpperCaseFileName.type
den richtigen Pfad, anstatt die MRU-Datei über ein Plugin zu durchsuchen .quelle
lowercase.cpp
und möchten sie öffnenLowerCase.cpp
. Es ist wahrscheinlich ein Fehler, aber es ist die gleiche Lösung.