la historia no se conserva en zsh

16

Cada vez que abro una nueva instancia de una terminal, el historial está vacío. ¿Porqué es eso? ¿Necesito configurar algo? Sin embargo, en bash no hay necesidad de esto.

Gilles 'SO- deja de ser malvado'
fuente
No estoy seguro zsh, pero por defecto bashescribe en sus archivos de historial al salir , lo que significa que si no lo ha usado antes y abre algunos shells, todos mostrarán ahora el historial hasta que al menos uno cierre la sesión, escribiendo así su archivo de historial.
DopeGhoti

Respuestas:

24

Bash y zsh tienen valores predeterminados diferentes. Zsh no guarda el historial en un archivo de forma predeterminada.

Cuando ejecuta zsh sin un archivo de configuración, muestra una interfaz de configuración. En esta interfaz de configuración, seleccione

(1)  Configure settings for history, i.e. command lines remembered
     and saved by the shell.  (Recommended.)

luego revise la configuración propuesta y seleccione

# (0)  Remember edits and return to main menu (does not save file yet)

Repita para los otros submenús para (2) completar, (3) combinaciones de teclas y (4) opciones, luego seleccione

(0)  Exit, saving the new settings.  They will take effect immediately.

desde el menú principal.

Las configuraciones recomendadas relacionadas con el historial son

HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
setopt appendhistory

Usaría un nombre diferente para el archivo de historial, para indicar que es el archivo de historial de zsh. Y 1000 líneas se pueden aumentar en un sistema moderno.

HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt appendhistory

Estas líneas entran ~/.zshrc, por cierto.

Gilles 'SO- deja de ser malvado'
fuente
8

Si bien la respuesta existente es correcta, pensé que podría valer la pena agregar que posiblemente haya una mejor opción que appendhistoryguardar su historial y esta es SHARE_HISTORY.

Desde los documentos SHARE_HISTORY"ambos importan nuevos comandos del archivo de historial y también hacen que sus comandos escritos se agreguen al archivo de historial". Esto significa que los shells también conocen el historial de los demás sin tener que cerrar el actual o abrir uno nuevo.

Entonces, todos juntos lo establecerían así:

HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=1000
setopt SHARE_HISTORY
bert
fuente
1
+1 y bienvenido a U / L, pero personalmente prefiero INC_APPEND_HISTORY_TIME, que escribe en el historial desde todos los terminales como se indicó anteriormente, pero ese historial "no estará disponible inmediatamente desde otras instancias del shell que estén usando el mismo archivo de historial". Esto tiene más sentido para mí, porque entonces puedo recorrer el historial de cada terminal de forma independiente, pero todavía está todo registrado.
Sparhawk
2
¡Gracias! Sí, eso es lo suficientemente justo y puedo ver por qué INC_APPEND_HISTORY_TIMEpodría tener más sentido lógico. Probablemente no debería haber dicho "mejor", ¡supongo que es solo una cuestión de preferencia personal en este momento!
bert
0

la primera vez que cambies de bash a zsh, tu historial de bash no se transferirá. Entonces, toda la historia que tenía en bash todavía está en el archivo de historia de bash. zsh comienza a capturar el historial desde el momento en que comienza a usarlo como shell.

Si no lo configuró para capturar el historial, puede volver a ejecutar el asistente de configuración y decirle a zsh cuánto historial guardar. Cambie el nombre de ~ / .zshrc o bórrelo para obtener una nueva oportunidad en el asistente.

LocoCoyote
fuente
0

Si no funciona y ya tiene todo esto en su lugar, intente:

fc -W

Eso escribe el historial actual en el archivo de historial. Y si obtienes:

zsh: locking failed for /home/username/.zsh_history: permission denied

entonces es hora de verificar los permisos en el archivo y en el directorio principal.

Chris Snyder
fuente