Ich möchte Dateien ändern, vim
ohne die Erstellungszeitstempel zu ändern .
Die Dokumente scheinen nichts über eine solche Möglichkeit zu erwähnen.
Ich möchte dies erreichen, ohne die Swap / Recovery-Funktion auszuschalten.
Eine Alternative wäre, die Zeit irgendwo zu speichern und sie dann beim Beenden zu überschreiben, denke ich.
Antworten:
Satos Antwort wäre auf einem Standard-Unix-Derivat richtig, bei dem
ctime
oft mit der Erstellungszeit verwechselt wird, aber tatsächlich die Inode-Änderungszeit ist und das "Beibehalten" nicht wirklich Sinn macht. Ich habe jedoch gefragt, welches Betriebssystem das Poster verwendet, da Mac OS X eine separate Erstellungszeit verwaltet, die ein tatsächliches Erstellungsdatum und eine tatsächliche Erstellungszeit darstellt und nicht durch Ändern der vorhandenen Datei oder Ändern des Dateimodus oder Ähnlichem aktualisiert wird davon aktualisierenctime
.Sie können die Erstellungszeit anzeigen, indem Sie eine Info für eine Datei im Finder oder
GetFileInfo <file>
über eine Befehlszeile abrufen (GetFileInfo
die Entwicklertools müssen installiert sein). Die Zeit kann mit geändert werdenSetFile -d <datetime> <file>
(erfordert auch Entwicklertools).Es erscheint also vernünftig (ich weiß nichts über Bram :-)), vim zu bitten, die Erstellungszeit unter Mac OS X beizubehalten, indem die Erstellungszeit von der Originaldatei in die neue Datei kopiert wird, aber dies ist eindeutig nicht der Fall Wenn ich durch die Vim-Quellen schaue, sehe ich nirgendwo, wo es so ist. Leider scheint die Antwort auf die Frage des Posters "Es ist derzeit nicht möglich" zu sein. Da Mac OS X (mit Entwicklertools) das Abrufen und Festlegen der Erstellungszeit über die Befehlszeile ermöglicht, kann möglicherweise ein VIM-Skript zusammengestellt werden, das dies tut, obwohl dies (derzeit) über meine VIM-Skriptfähigkeiten hinausgeht.
Bearbeiten
Ich beschloss, mit Skripten herumzuspielen und brachte sie tatsächlich zum Laufen!
Fügen Sie Ihrer .vimrc Folgendes hinzu:
Dadurch werden automatische Befehle so eingestellt, dass sie ausgeführt werden, bevor eine Datei gelesen wird (zum Bearbeiten in einem Puffer, nicht für Dinge wie
:read
) und nachdem sie geschrieben wurde. Die ersten Aufrufe, mitSaveFileCreateTime
denenGetFileInfo -d
die Erstellungszeit der Datei abgerufen und in der lokalen Puffervariablen gespeichert wirdb:created
. Nachdem eine Datei geschrieben wurde,RestoreFileCreateTime
wird aufgerufen. Wennb:created
vorhanden, wird es in einemsystem
BefehlSetFile -d
zum Einstellen der Uhrzeit verwendet.Hier ist ein Beispiel:
Sie können sehen, dass sich die Inode-Änderungszeit (wie von angezeigt
stat
) geändert hat, die Erstellungszeit für Dateien (wie von angezeigtGetFileInfo
) jedoch nicht. Erfolg!Wie oben erwähnt, müssen hierfür die Entwicklertools installiert sein, um GetFileInfo und SetFile abzurufen. Dies ist auch mein erstes richtiges Skript. Sie können also auf all die abscheulichen Fehler hinweisen, die ich gemacht habe!
quelle
vim
Laufzeitänderung mit diesen Tools, die ich übrigens installiert habe, um das Erstellungsdatum beizubehalten?vimdiff
Dateien von root und user erstellt habe. So weit, ist es gut. Sie sollten dies im Vim Tips-Wiki veröffentlichen . Das war eine großartige Antwort, danke.stat
Befehl ist für Linux, denke ich. In OS X 10.8.5 würden Sie verwendenstat -f %Sc
.Fügen Sie
set backupcopy=yes
Ihrer vimrc-Datei hinzu, um die Erstellungszeit der Datei unter macOS zu erhalten.Weitere Informationen finden Sie unter
:help 'backupcopy'
.Quelle: Wie kann ich VIM veranlassen, das Erstellungsdatum für eine Datei beizubehalten? (OS X)
quelle
Was Sie möchten, kann unter UNIX nicht mit Standard-Userspace-Funktionen implementiert werden. Das
ctime
einer Datei wird vom Kernel automatisch aktualisiert, wenn sich die Dateiinode
ändert . Im Gegensatz zuatime
undmtime
gibt es keine vom Benutzer zugängliche Funktion, umctime
einen beliebigen Wert festzulegen.quelle
vim
, anstatt Dateien auszutauschen, einfachcp test.swp test.txt
?less test.swp
sollte Ihre Frage beantworten.