La réponse de Sato serait correcte sur un dérivé standard d'Unix, où il ctime
est souvent confondu avec le temps de création mais est en fait un temps de changement d'inode, et "le préserver" n'a pas vraiment de sens. Cependant, j'ai demandé quel système d'exploitation le poster utilise parce que Mac OS X maintient une heure de création distincte qui est une date et une heure de création réelles, et n'est pas mise à jour en modifiant le fichier en place ou en changeant le mode du fichier ou quelque chose comme ça, tous dont mise à jour ctime
.
Vous pouvez voir l'heure de création en effectuant une extraction d'informations sur un fichier dans le Finder ou à GetFileInfo <file>
partir d'une ligne de commande ( GetFileInfo
nécessite l'installation des outils de développement). L'heure peut être modifiée à l'aide SetFile -d <datetime> <file>
(nécessitant également des outils de développement).
Il semble donc raisonnable (pour moi, je ne sais pas pour Bram :-)) de demander à vim de maintenir l'heure de création sur Mac OS X, en copiant l'heure de création du fichier d'origine vers le nouveau fichier, mais cela ne le fait clairement pas 't, et en regardant à travers les sources vim, je ne vois nulle part où il le fait. Donc, malheureusement, il semble que la réponse à la question de l'affiche soit "Ce n'est pas possible actuellement". Étant donné que Mac OS X (avec des outils de développement) permet d'obtenir et de définir l'heure de création à partir de la ligne de commande, il peut être possible de créer un script vim qui le fasse, bien que cela soit (actuellement) au-delà de mes capacités de scriptage vim.
Éditer
J'ai décidé de jouer avec quelque chose de script et je l'ai fait fonctionner!
Ajoutez ce qui suit à votre .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
Cela définit les commandes automatiques à exécuter avant la lecture d'un fichier (pour l'édition dans un tampon, pas pour des choses comme :read
) et après son écriture. Le premier appel SaveFileCreateTime
qui utilise GetFileInfo -d
pour obtenir le temps de création du fichier et le stocker dans la variable locale du tampon b:created
. Après l'écriture d'un fichier, RestoreFileCreateTime
est appelé. S'il b:created
existe, il est utilisé dans une system
commande à utiliser SetFile -d
pour régler l'heure.
Voici un exemple:
$ 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
Vous pouvez voir que l'heure de modification de l'inode (comme affiché par stat
) a changé, mais l'heure de création du fichier (comme affiché par GetFileInfo
) n'a pas changé . Succès!
Comme indiqué ci-dessus, cela nécessite que les outils de développement soient installés pour obtenir GetFileInfo et SetFile. Aussi, c'est mon premier vrai script, alors n'hésitez pas à signaler toutes les hideuses erreurs que j'ai faites!