Estoy feliz usando zsh
desde hace un tiempo, y estoy bastante satisfecho con mi configuración de historial, que son:
# Write to history immediately
setopt inc_append_history
# History shared among terminals
setopt share_history
# Save extended info in history
setopt extended_history
# Ignore duplicates
setopt hist_ignoredups
Pero sucede a menudo que necesito usar comandos específicos dentro de algunos directorios específicos. Por ejemplo, cuando estoy adentro ~/my_project
, generalmente invoco make target1 && ./run1
, pero cuando estoy adentro ~/second_project
, generalmente necesito make target2 && cat foobar | ./run2
.
Es decir: directorios diferentes, pero comandos similares.
Entonces, usualmente cd ~/my_project
escribo make
y luego busco hacia atrás en el historial hasta encontrar lo que necesito. Pero si sucede que trabajé second_project
, al buscar en el historial encontraré algunos comandos que no necesito.
Entonces, mi pregunta: ¿existe un complemento / configuración / algo para zsh tal que, al buscar en el historial, los comandos invocados en el directorio actual se muestren primero?
Idealmente, todos los demás comandos de historial coincidentes aparecerán después de esos, opcionalmente especificando un número máximo de elementos prioritarios.
Intentaría escribir algo como esto por mí mismo, pero todavía no sé cómo escribir complementos personalizados de zsh, cómo manejar el historial, etc.
fuente
ctrl-g
(y no por prioridad como pregunté). Sin embargo, todavía lo encuentro extremadamente útil y una buena respuesta a mi pregunta, así que, gracias :)Acabo de escribir un pequeño complemento que hace mucho de lo que hace el complemento de Jim Hester, pero utiliza un enfoque diferente que soluciona muchos de los problemas enumerados en el repositorio de GitHub de ese complemento:
https://github.com/ericfreese/zsh-cwd-history
Almacena un
HISTFILE
directorio separado para cada directorio en el que ha ejecutado comandos, y agrega unchpwd
enlace para cambiar entreHISTFILE
s cuando cambia de directorio.También proporciona un widget zle que puede vincular a una pulsación de tecla que alternará
HISTFILE
entre su "global" originalHISTFILE
y elHISTFILE
de su directorio de trabajo actual.El complemento zsh-cwd-history actualmente no admite esto, pero espero agregar soporte pronto.
fuente
Tuve exactamente el mismo problema y escribí un complemento ZSH que lo resuelve: https://github.com/tymm/zsh-directory-history
No tiene que cambiar manualmente entre el historial global y el de directorio cuando usa mi complemento.
Esto también funciona fuera de la caja con mi complemento.
fuente