Für Dateien in einem bestimmten Ordner möchte ich, dass vim niemals den "geänderten" Zeitstempel berührt.
Der Hintergrund ist, dass ich Bloxsom für das Bloggen benutze, das reine Textdateien ~/bloxsom
als Quelle für alle Artikel verwendet. Das Artikeldatum (und damit die Reihenfolge des Auftretens) basiert auf dem Änderungsdatum der Textdatei. Ich möchte nicht, dass Artikel auftauchen, wenn sie neu sind, wenn ich nur einen Tippfehler behebe. (Ich mache viele
von ihnen ...: D)
Bisher ändert vim den Zeitstempel und der Originalstempel ist für immer verloren. Dies ist in Ordnung und ich möchte dies für die meisten Dateien auf dem System beibehalten. Aber ich möchte das nicht für die Blog-Dateien - ich kann immer touch
die Datei, wenn ich brauche.
Irgendwelche Ideen, wie Sie dieses Verhalten optimieren können?
quelle
Antworten:
Ich glaube nicht, dass vim diese Funktion hat. Eine Alternative besteht darin, eine Kopie zu ändern und den Zeitstempel entsprechend festzulegen, z.
Oder noch besser:
quelle
Wenn du Spaß haben willst:
Ersetzen Sie den Pfad durch Ihren tatsächlichen Dateipfad
quelle
Ich habe dafür ein Perl-Skript geschrieben.
Es ist ein Wrapper um vim, der in meinem .bashrc gespeichert
~/bin/vim-nomtime.pl
und verwendetalias vim='~/bin/vim-nomtime.pl'
wird.Einige gute Eigenschaften:
unterstützt mehrere Dateinamen
unterstützt mehrere "überwachte" Verzeichnisse
unterstützt symlinked dir
kann mit anderen Kriterien erweitert werden
die meisten davon könnten wahrscheinlich auch mit einer reinen vim-version erreicht werden. Nachteile dieser Lösung im Vergleich zu meiner gewünschten Pure-Vim-Lösung sind:
erst nach dem beenden von vim wird der stempel wiederhergestellt. Wenn ich also lange bearbeite und regelmäßig speichere, wird die datei als neu angezeigt, bis ich vim beende
Es unterstützt mehrere Dateien auf der Kommandozeile, aber auf ganz naive Weise - es überprüft nur, ob es sich bei dem Objekt
@ARGV
um eine Datei handelt. Dies würde wahrscheinlich nicht mit Platzhaltern (zBvim note-*.txt
) oder anderen lustigen Sachen funktionierenes ist nicht crashsicher, wahrscheinlich nicht einmal HUP-sicher (das könnte getan werden)
... na ja, es ist ein Wrapper. (Ich meine, wenn wir alles über einen Wrapper lösen würden, wie viele Wrapper hätten wir, bevor etwas Schlimmes passiert wäre?)
quelle
Dieses kurze Skript behält die geänderte Zeit bei, wenn ein übergeordnetes Verzeichnis der Datei eine
.nomtime
Datei enthält :quelle
Probieren Sie diese
bash
Funktion aus ( basierend auf Shâu Shắcs Antwort )Jetzt können wir die Datei bearbeiten und die geänderte Zeit beibehalten
quelle
vi
nur eine einzelne Datei aufruft . es wird nicht funktionierenvi file1 file2
. (3) Wenn der Benutzer mit zu einer anderen Datei:e
wechselt, wird dies selbstverständlich nicht behandelt.Es besteht die Möglichkeit, einen Zeitstempel aus einer anderen Datei zu kopieren.
Beispiel:
quelle
Ich habe auf dieser Webseite eine großartige Lösung gefunden , die eine vim-Funktion zum Speichern der aktuellen Datei erstellt, während die vorhandene Änderungszeit beibehalten wird, und diese Funktion an die F4Funktionstaste bindet :
Ich habe jedoch festgestellt, dass die ursprüngliche Funktion einen kleinen Fehler enthält, der die folgende Warnung auslöst, wenn F4dieselbe Datei zweimal verwendet wird, da vim verwirrt wird, wenn sich die Änderungszeit ändert:
Glücklicherweise ist dies einfach zu beheben: Ich habe der ursprünglichen Funktion einen "Bearbeiten" -Befehl hinzugefügt, um die Datei nach dem Wiederherstellen des Zeitstempels neu zu laden, sodass vim weiß, welche Änderungszeit für die Datei zu erwarten ist.
Hier ist die modifizierte vim-Funktion mit dieser Fehlerbehebung, die hinzugefügt werden kann
~/.vimrc
:Hinweis: Diese Funktion basiert auf GNU - Versionen
date
,stat
undtouch
.quelle
Unter Verwendung einiger der oben beschriebenen Konzepte ist hier ein sehr schneller und unsauberer Einzeilen-Alias für CSH, der einen "Bearbeiten" -Befehl für diesen Zweck zur Verfügung stellt:
Anstelle von "vim" können Sie auch einfach die Umgebungsvariable $ VISUAL oder $ EDITOR verwenden. Auf diese Weise können Sie den folgenden Befehl ausführen, um die Standardeditoren zu ändern
Jetzt muss der Alias selbst nicht mehr neu definiert werden, um verschiedene Editoren zu unterstützen, was ihn etwas portabler macht. Wenn Sie eine andere Shell als CSH oder TCSH verwenden, können die obigen Beispiele natürlich entsprechend angepasst werden.
quelle