Je souhaite modifier des fichiers avec vim
sans changer les horodatages de création.
Les documents ne semblent rien mentionner d'une telle possibilité.
Je voudrais y parvenir sans désactiver la fonction d'échange / récupération.
Une alternative serait de stocker l'heure quelque part, puis de l'écraser à la sortie, je suppose.
Réponses:
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 à jourctime
.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'aideSetFile -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:
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 appelSaveFileCreateTime
qui utiliseGetFileInfo -d
pour obtenir le temps de création du fichier et le stocker dans la variable locale du tamponb:created
. Après l'écriture d'un fichier,RestoreFileCreateTime
est appelé. S'ilb:created
existe, il est utilisé dans unesystem
commande à utiliserSetFile -d
pour régler l'heure.Voici un exemple:
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é parGetFileInfo
) 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!
la source
vim
runtime d' alter en utilisant ces outils, que j'ai installés btw, pour conserver la date de création?vimdiff
ingénierie de fichiers appartenant à root et à l'utilisateur. Jusqu'ici tout va bien. Vous devriez poster ceci dans le wiki Vim Tips . C'était une excellente réponse, merci.stat
commande est pour Linux, je suppose. Dans OS X 10.8.5, vous utiliseriezstat -f %Sc
.Ajoutez
set backupcopy=yes
à votre fichier vimrc pour conserver le temps de création de fichier sur macOS.Pour plus d'informations, voir
:help 'backupcopy'
.Source: Comment puis-je demander à VIM de maintenir la date de création d'un fichier? (OS X)
la source
Ce que vous voulez n'est pas possible d'implémenter sous UNIX à l'aide des fonctions standard de l'espace utilisateur. Le
ctime
fichier est mis à jour automatiquement par le noyau lorsque le fichierinode
change . Contrairement àatime
etmtime
, il n'y a pas de fonction accessible à l'utilisateur pour définirctime
une valeur arbitraire.la source
vim
, au lieu d'échanger des fichiers, justecp test.swp test.txt
?less test.swp
devrait répondre à votre question.