
Para los archivos dentro de una carpeta específica, me gustaría que vim nunca toque la marca de tiempo "modificada".
El fondo es el que usoBloxsompara blogs, que utiliza archivos de texto sin formato ~/bloxsom
como fuente de todos los artículos. La fecha del artículo (y por lo tanto el orden de aparición) se basa en la fecha de modificación del archivo de texto. No quiero que el artículo aparezca como si fueranuevocada vez que soluciono un error tipográfico. (Sílotes
de ellos... :D)
Hasta ahora, vim cambia la marca de tiempo y la marca original se pierde para siempre. Esto está bien y quiero mantenerlo así para la mayoría de los archivos del sistema. Pero no quiero eso para los archivos del blog; siempre puedo obtener touch
el archivo si lo necesito.
¿Alguna idea sobre cómo modificar vim para que adopte este comportamiento?
Respuesta1
No creo que vim tenga esta característica. Una alternativa es modificar una copia y establecer la marca de tiempo apropiadamente, por ejemplo:
cp -p post temp
vim temp
touch -r post temp
cp -p temp post
O mejor:
touch -r post timestamp
vim post
touch -r timestamp post
Respuesta2
Si necesitas divertirte un poco:
file=path; mtime=$(stat -c %y "$file"); vi "$file"; touch -d "$mtime" "$file"
Reemplace la ruta con la ruta real de su archivo
Respuesta3
Encontré una gran solución en esta pagina web, que crea una función vim para guardar el archivo actual conservando el tiempo de modificación existente y vincula esta función a la F4tecla de función:
Sin embargo, descubrí que la función original contiene un error menor, que activa la siguiente advertencia si F4se usa dos veces en el mismo archivo, porque vim se confunde cuando cambia la hora de modificación:
WARNING: The file has been changed since reading it!!!
Do you really want to write to it (y/n)?
Afortunadamente, esto es fácil de solucionar: agregué un comando "editar" a la función original para recargar el archivo después de restaurar la marca de tiempo, de modo que vim sepa qué tiempo de modificación esperar que tenga el archivo.
Aquí está la función vim modificada con esta corrección de errores, que se puede agregar a ~/.vimrc
:
function! WriteSmall()
let mtime = system("stat -c %.Y ".shellescape(expand('%:p')))
write
call system("touch --date='@".mtime."' ".shellescape(expand('%:p')))
edit
endfunction
map <F4> :call WriteSmall()<CR>
Nota:Esta función se basa en las versiones GNU de date
, stat
y touch
.
Respuesta4
Pruebe esta bash
función (basada enLa respuesta de Shâu Shắc)
vi-preserve-time () {
for file in "$@"; do
local mtime=$(stat -c %y "$file")
vi "$file"
touch -d "$mtime" "$file"
done
}
Ahora podemos editar el archivo y conservar el tiempo modificado usando esto
vi-preserve-time file1.txt file2.txt