Historial de comandos en Zsh

62

¿Cómo Zsh realiza un seguimiento del historial de comandos?

Veo dos archivos en mi directorio de inicio: .zhistoryy .zsh_history. ¿Cuál es la diferencia entre ellos? Los archivos parecen contener todo mi historial. ¿Zsh sigue agregando líneas a una de ellas para siempre ? ¿No haría eso que la búsqueda en el historial sea demasiado lenta?

¿Puedo hacer que estos archivos sean enlaces simbólicos a otra ubicación? (por ejemplo, un repositorio git para realizar un seguimiento de los cambios en el historial)

Amelio Vazquez-Reina
fuente
Verifique su ~/.zshrcy / o las /etc/zshrcopciones descritas allí zsh.sourceforge.net/Guide/zshguide02.html#l17
UVV

Respuestas:

79

Zsh almacena líneas de entrada (posiblemente con información de tiempo) en el archivo indicado por la variable HISTFILE. Debe ser un nombre de archivo absoluto (de lo contrario, se interpretará en relación con el directorio actual en ese momento).

Zsh no tiene un valor predeterminado incorporado para HISTFILE. La distribución de zsh viene con un asistente de configuración para nuevos usuarios que tiene el valor ~/.histfileincorporado, por lo que esto es lo que los usuarios de zsh obtienen de manera predeterminada. Oh-my-zsh viene con HISTFILE=.zhistorypreajuste. Parece que probaste zsh tanto con la configuración predeterminada como con oh-my-zsh. Verifique su .zshrc(o las fechas del archivo) para ver cuál está usando actualmente.

La forma en que zsh abre el archivo y, por lo tanto, qué sucede si se trata de un enlace simbólico, depende de varias opciones.

  • Si una de las opciones append_history(configurada de manera predeterminada), inc_append_historyo share_historyestá configurada, o cuando el historial se guarda explícitamente con fc -AI, zsh se agrega al archivo existente.
    Tenga en cuenta que incluso con estas configuraciones, zsh ocasionalmente sobrescribe el archivo como se describe a continuación para recortarlo a su tamaño.
  • De lo contrario, si la opción hist_save_by_copyestá establecida (se establece de forma predeterminada desde zsh 5.0, pero no existe en 4.2), zsh escribe un archivo temporal y luego lo mueve en su lugar cuando se completa. En este caso, si el archivo de historial era un enlace simbólico, el nuevo archivo reemplaza al enlace simbólico.
  • De lo contrario, zsh sobrescribe el archivo existente en su lugar.

En lugar de apuntar zsh a un enlace simbólico, configúrelo HISTFILEdonde quiera que esté el archivo del historial.

La cantidad de líneas del historial que se guardan se configura a través de las variables HISTSIZEy SAVEHIST. HISTSIZEes el número máximo de líneas que se mantienen en una sesión y SAVEHISTes el número máximo de líneas que se mantienen en el archivo de historial.

Para guardar algo de historial, debe establecer ambos HISTFILEy SAVEHIST, como el valor predeterminado SAVEHISTes 0. También puede aumentar HISTSIZE(a partir de zsh 5.0, el valor predeterminado es solo 30).

Gilles 'SO- deja de ser malvado'
fuente