Wenn ich den Quellcode mit gvim (v.7.4.488) bearbeite, möchte ich einige Änderungen an den vcs vornehmen (ich verwende git 2.1.4 über die Befehlszeile unter Ubuntu Linux).
git --status
zeigt, welche Dateien ich geändert habe. Es wird jedoch auch die vim .*.swp
der aktuell sichtbaren Puffer .*.swp
angezeigt (sowohl wenn die Datei nicht gespeicherte Änderungen enthält als auch wenn die bearbeitete Datei mit der -file identisch ist). Natürlich kann git diese Dateien ignorieren oder vim kann die Auslagerungsdateien an einem anderen Ort speichern (siehe vim.wikia oder diese Frage bei stackoverflow ). Aber ich mag .*.swp
es, git --status
wenn die -files angezeigt werden, wenn sie nicht gespeicherte Änderungen enthalten, da sie mir signalisieren, dass ich Dateien in einem anderen Zustand festschreibe als dem, in dem sie sich befinden.
Wie kann ich vermeiden, dass Fehlalarme von .*.swp
-files angezeigt werden, git --status
wenn die gespeicherte Datei mit der .*.swp
-file identisch ist, während die festzuschreibende Datei in einem anderen Zustand ist als die, die ich mit vim bearbeite?
- Ist es möglich, nur
.*.swp
-files zu haben , wenn Datei auf Festplatte und Datei in vim unterschiedlich sind? - Gibt es eine andere Möglichkeit, nicht gespeicherte Dateien zu erkennen?
Das Kombinieren der Kommentare von @elyashiv und @VanLaser führt zu einer einfacheren Methode als das Erkennen, ob Auslagerungsdateien nicht gespeicherte Dateien implizieren:
- lass git die. *. sw [po] -Dateien nicht ignorieren;
- wenn zu begehen, wenn
git --status
offenbart alle.*.sw[po]
-Dateien tun ein:wa
in vi; und, - hinzufügen und festschreiben.
:wa
damit sicherstellen, dass keine nicht gespeicherten Dateien vorhanden sind.git commit
...Antworten:
vim -r
In der Befehlszeile werden alle Auslagerungsdateien im aktuellen Verzeichnis und in den temporären Verzeichnissen aufgelistet und ob sie nicht gespeicherte Änderungen enthalten. Suchen Sie nach der Zeile, die sagtmodified: no/YES
.Ich weiß nicht, wie ich Vim anweisen soll, in einem anderen Verzeichnis zu suchen, daher müssen Sie zu jedem Verzeichnis wechseln, das eine Auslagerungsdatei enthält, und ausführen
vim -r
. Sie könnten ein Skript erstellen, das die Ausgabe von analysiertgit status
oder verwendetfind -name '.*.sw[po]'
und dannvim -r
in jedem Verzeichnis ausgeführt wird, um alle Auslagerungsdateien mit nicht gespeicherten Änderungen anzuzeigen.(Ich verwende
.*.sw[po]
stattdessen.*.swp
, weil manchmal.swo
Dateien zusätzlich zu.swp
Dateien erstellt werden, wenn Sie eine Datei bearbeiten, die bereits eine Auslagerungsdatei enthält..swn
Dateien können auch erstellt werden, wenn Sie eine Datei mit zwei vorhandenen Auslagerungsdateien bearbeiten, aber ich denke nicht Ich habe jemals einen in freier Wildbahn gesehen. Wenn Sie wirklich paranoid sind, können Sie ihn verwenden.*.sw[a-p]
oder einfach.*.sw?
.)Siehe
:help -r
für (etwas) mehr Informationen über die-r
Option, oder:help recover.txt
für weitere Informationen über die Verwertung und Swap - Dateinamen.quelle
.
im Dateinamen führend ), also wäre das richtige Muster.*.sw[a-p]
(obwohl Sie in pathologischen Fällen tatsächlich den ganzen Weg dorthin gelangen könnten.foo.saa
). Das sollte auch übereinstimmende Flash-Dateien ausschließen, da ich bezweifle, dass dies normalerweise eine versteckte Datei ist..
wird in einem Shell-Glob benötigt,*.swp
funktioniert aber als Argument fürfind
. Aber die Führung.
macht die Dinge einfacher. Vielen Dank!Ja. Das folgende Snippet (angepasst von tpopes vimrc ) deaktiviert die Auslagerungsdatei für einen Puffer, wenn sie nicht geändert wird, sodass Auslagerungsdateien nur für geänderte Dateien vorhanden sind.
Vorsichtsmaßnahme : Da die Auslagerungsdatei nur vorhanden ist, wenn der Puffer geändert wird, verlieren Sie die Verwendung der Auslagerungsdatei als Hinweis. Wenn der Puffer nicht geändert wird, kann ein anderer Vim ihn bearbeiten, ohne zu bemerken, dass er bereits geöffnet ist. Wenn der zweite Vim speichert, bevor der erste weitere Änderungen vornimmt, werden sie erst bemerkt, wenn der Benutzer versucht zu speichern oder etwas Vim dazu veranlasst, zu überprüfen, ob die Datei geändert wurde.
quelle