Quiero modificar archivos vim
sin cambiar las marcas de tiempo de creación.
Los documentos no parecen mencionar nada sobre tal posibilidad.
Me gustaría lograr esto sin desactivar la función de intercambio / recuperación.
Supongo que una alternativa sería almacenar el tiempo en algún lugar y luego sobrescribirlo al salir.
Respuestas:
La respuesta de Sato sería correcta en una derivada estándar de Unix, donde a
ctime
menudo se confunde con el tiempo de creación pero en realidad es el tiempo de cambio de inodo, y "preservar" realmente no tiene sentido. Sin embargo, pregunté qué sistema operativo está usando el póster porque Mac OS X mantiene una hora de creación separada que es una fecha y hora de creación real, y no se actualiza modificando el archivo en su lugar o cambiando el modo del archivo o algo así, todo de los cuales se actualizanctime
.Puede ver el tiempo de creación haciendo una Obtener información en un archivo en el Finder o
GetFileInfo <file>
desde una línea de comandos (GetFileInfo
requiere la instalación de las herramientas del desarrollador). El tiempo se puede modificar usandoSetFile -d <datetime> <file>
(también requiere herramientas de desarrollador).Entonces, parece razonable (para mí, no sé acerca de Bram :-)) pedir vim para mantener el tiempo de creación en Mac OS X, copiando el tiempo de creación del archivo original en el nuevo archivo, pero claramente no 't, y mirando a través de las fuentes vim, no veo ningún lugar donde lo haga. Entonces, desafortunadamente, parece que la respuesta a la pregunta del afiche es "Actualmente no es posible". Debido a que Mac OS X (con herramientas de desarrollo) permite obtener y configurar el tiempo de creación desde la línea de comandos, es posible armar un script vim que lo haga, aunque eso (actualmente) está más allá de mis capacidades de creación de scripts vim.
Editar
¡Decidí jugar con algo de scripting y realmente lo conseguí!
Agregue lo siguiente a su .vimrc:
Eso establece que los comandos automáticos se ejecuten antes de que se lea un archivo (para editar en un búfer, no para cosas como
:read
) y después de que se escriba. Las primeras llamadasSaveFileCreateTime
que se utilizanGetFileInfo -d
para obtener el tiempo de creación del archivo y almacenarlo en la variable local del búferb:created
. Después de que se escribe un archivo,RestoreFileCreateTime
se llama. Sib:created
existe, se usa en unsystem
comandoSetFile -d
para establecer la hora.Aquí hay un ejemplo:
Puede ver que el tiempo de cambio de inodo (como se muestra por
stat
) ha cambiado, pero el tiempo de creación del archivo (como se muestra porGetFileInfo
) no. ¡Éxito!Como se señaló anteriormente, esto requiere que las herramientas de desarrollador estén instaladas para obtener GetFileInfo y SetFile. Además, este es mi primer script real, ¡así que siéntete libre de señalar todos los horribles errores que he cometido!
fuente
vim
un tiempo de ejecución alternativo usando esas herramientas, que sí he instalado por cierto, para preservar la fecha de creación?vimdiff
usaba archivos propiedad de root y usuario. Hasta aquí todo bien. Debes publicar esto en la wiki de Vim Tips . Esa fue una gran respuesta, gracias.stat
comando es para Linux, supongo. En OS X 10.8.5 usaríasstat -f %Sc
.Agregue
set backupcopy=yes
a su archivo vimrc para preservar el tiempo de creación de archivos en macOS.Para más información, ver
:help 'backupcopy'
.Fuente: ¿Cómo puedo hacer que VIM mantenga la fecha de creación de un archivo? (OS X)
fuente
Lo que desea no es posible implementar en UNIX utilizando funciones de espacio de usuario estándar. El
ctime
núcleo actualiza automáticamente el archivo cuandoinode
cambia el archivo . A diferencia deatime
ymtime
, no hay una función accesible para el usuario para establecerctime
un valor arbitrario.fuente
vim
, en lugar de intercambiar archivos, simplementecp test.swp test.txt
?less test.swp
debería responder a su pregunta.