Para los archivos dentro de una carpeta específica, me gustaría que vim nunca toque la marca de tiempo "modificada".
El fondo es que uso Bloxsom para bloguear, que usa 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 aparezca un artículo emergente como si fuera nuevo cada vez que soluciono un error tipográfico. (Hago muchos
de ellos ...: D)
Hasta ahora, vim cambia la marca de tiempo y el sello original se pierde para siempre. Esto está bien y quiero mantenerlo así para la mayoría de los archivos en el sistema. Pero no quiero eso para los archivos del blog; siempre touch
puedo usar el archivo si lo necesito.
¿Alguna idea sobre cómo ajustar vim en este comportamiento?
fuente
Respuestas:
No creo que vim tenga esta característica. Una alternativa es modificar una copia y establecer la marca de tiempo adecuadamente, por ejemplo:
O mejor:
fuente
Si necesitas divertirte un poco:
Reemplace la ruta con su ruta de archivo real
fuente
Escribí un script de Perl para eso.
Es un contenedor alrededor de vim, guardado
~/bin/vim-nomtime.pl
y puesto en uso a travésalias vim='~/bin/vim-nomtime.pl'
de mi .bashrc.Algunas buenas características:
admite múltiples nombres de archivo
admite múltiples directorios "vistos"
soporta dir enlazado
se puede mejorar con otros criterios
la mayoría de los cuales probablemente también se podría lograr con la versión vim pura. Las desventajas de esta solución en comparación con mi solución pura de vim deseada son:
restaura el sello solo después de que vim ha salido, así que si hago una edición larga y la guardo regularmente, el archivo aparecerá como "emergente" como nuevo hasta que salga de vim
admite varios archivos en la línea de comandos, pero de una manera bastante ingenua: solo comprueba si el
@ARGV
archivo es un archivo. Esto probablemente no funcionaría con comodines (por ejemplovim note-*.txt
) u otras cosas divertidasno es a prueba de choques, probablemente ni siquiera a prueba de HUP (eso podría hacerse)
... bueno, es una envoltura. (Quiero decir, si resolviéramos todo a través de wrapper, ¿cuántos wrappers tendríamos antes de que algo malo sucediera?)
fuente
Este breve script conservará el tiempo modificado si algún directorio principal del archivo contiene un
.nomtime
archivo:fuente
Pruebe esta
bash
función ( basada en la respuesta de Shâu Shắc )Ahora podemos editar el archivo y preservar el tiempo modificado usando esto
fuente
vi
en un solo archivo a la vez; no va a funcionar paravi file1 file2
. (3) No hace falta decir que, si el usuario cambia a un archivo diferente:e
, no se manejará.Hay una opción para copiar una marca de tiempo de otro archivo.
Ejemplo:
fuente
Encontré una gran solución en esta página web , que crea una función vim para guardar el archivo actual al tiempo que conserva 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, activando la siguiente advertencia si F4se usa dos veces en el mismo archivo, porque vim se confunde cuando cambia el tiempo de modificación:
Afortunadamente, esto es fácil de solucionar: agregué un comando "editar" a la función original para volver a cargar el archivo después de restaurar la marca de tiempo, por lo que vim sabe qué hora 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
:Nota: Esta función se basa en las versiones de GNU de
date
,stat
ytouch
.fuente
Usando algunos de los conceptos descritos anteriormente, aquí hay un alias de una línea muy rápido y sucio para CSH que hace que un comando "editar" esté disponible para este propósito:
Puede usar fácilmente la variable de entorno $ VISUAL o $ EDITOR en lugar de "vim". De esta manera, puede emitir el siguiente comando para cambiar los editores predeterminados
Ahora el alias en sí no necesita ser redefinido para acomodar a diferentes editores, lo que lo hace algo más portátil. Si utiliza un shell distinto de CSH o TCSH, por supuesto, los ejemplos anteriores se pueden adaptar en consecuencia.
fuente