La risposta di Sato sarebbe corretta su un derivato Unix standard, dove ctime
spesso viene scambiato per tempo di creazione ma in realtà è tempo di cambio dell'inode e "preservare" non ha davvero senso. Tuttavia, ho chiesto quale sistema operativo utilizza il poster perché Mac OS X mantiene un orario di creazione separato che è una data e ora di creazione effettive e non viene aggiornato modificando il file in atto o cambiando la modalità del file o qualcosa del genere, tutto di cui si aggiorna ctime
.
Puoi vedere il tempo di creazione facendo un Get Info su un file nel Finder o GetFileInfo <file>
da una riga di comando ( GetFileInfo
richiede l'installazione degli strumenti di sviluppo). Il tempo può essere modificato utilizzando SetFile -d <datetime> <file>
(che richiede anche strumenti di sviluppo).
Quindi sembra ragionevole (per me, non so di Bram :-)) chiedere a Vim di mantenere il tempo di creazione su Mac OS X, copiando il tempo di creazione dal file originale al nuovo file, ma chiaramente non lo fa e, guardando attraverso le fonti di VIM, non vedo da nessuna parte dove lo fa. Quindi, sfortunatamente, sembra che la risposta alla domanda del poster sia "Attualmente non è possibile". Poiché Mac OS X (con strumenti di sviluppo) consente di ottenere e impostare il tempo di creazione dalla riga di comando, potrebbe essere possibile mettere insieme uno script VIM che lo fa, sebbene (attualmente) al di là delle mie capacità di scripting Vim.
modificare
Ho deciso di scherzare con lo scripting e in realtà l'ho fatto funzionare!
Aggiungi quanto segue al tuo .vimrc:
autocmd BufReadPre * call SaveFileCreateTime()
autocmd BufWritePost * call RestoreFileCreateTime()
function! SaveFileCreateTime()
let l:path = expand('%:p')
if l:path != ''
let b:created = system("GetFileInfo -d " . shellescape(bufname("%")))
endif
endfunction
function! RestoreFileCreateTime()
if exists('b:created')
execute system(
\ 'SetFile -d ' .
\ shellescape(b:created) .
\ ' ' .
\ shellescape(bufname("%")))
endif
endfunction
Ciò imposta l'esecuzione automatica dei comandi prima della lettura di un file (per la modifica in un buffer, non per cose simili :read
) e dopo la sua scrittura. Le prime chiamate SaveFileCreateTime
che utilizza GetFileInfo -d
per ottenere il tempo di creazione del file e memorizzarlo nella variabile locale del buffer b:created
. Dopo aver scritto un file, RestoreFileCreateTime
viene chiamato. Se b:created
esiste, viene utilizzato in un system
comando SetFile -d
per impostare l'ora.
Ecco un esempio:
$ echo hello >file.txt
$ stat -c%z file.txt;GetFileInfo -d file.txt
2015-11-07 11:44:04.000000000 -0800
11/07/2015 11:44:04
$ vim file.txt
a earth<esc>:wq
$ cat file.txt
hello earth
$ stat -c%z file.txt;GetFileInfo -d file.txt
2015-11-07 11:44:24.000000000 -0800
11/07/2015 11:44:04
Puoi vedere che il tempo di cambio dell'inode (come visualizzato da stat
) è cambiato, ma il tempo di creazione del file (come visualizzato da GetFileInfo
) non è cambiato . Successo!
Come notato sopra, ciò richiede l'installazione degli strumenti di sviluppo per ottenere GetFileInfo e SetFile. Inoltre, questa è la mia prima vera sceneggiatura, quindi sentiti libero di sottolineare tutti gli orribili errori che ho fatto!