2010-05-13 13 views
5

Quería lograr lo mismo que aquí Saving current directory to bash history, pero dentro del shell zsh. No he hecho ninguna trickry zsh antes, pero hasta ahora tengo:Guardando el directorio actual en el historial de zsh

function precmd { 
hpwd=$history[$((HISTCMD-1))] 
if [[ $hpwd == "cd" ]]; then 
cwd=$OLDPWD 
else 
cwd=$PWD 
fi 
hpwd="${hpwd% ### *} ### $cwd" 
echo "$hpwd" >>~/.hist_log 
} 

Ahora mismo guardar el comando anotado con el nombre del directorio a un archivo de registro. Esto funciona bien para mi. Solo pensé que podría haber una manera de hacer el reemplazo en el buffer de historial.

+3

posible duplicado de [¿Cómo puedo (desde un script) agregar algo al historial de comandos de zsh?] (Http://stackoverflow.com/questions/2816225/how-can-i-from-a-script-add -algo-al-zsh-comando-historia) –

Respuesta

6
function _-accept-line() { 
    [[ -z "${BUFFER" ]] || [[ "${BUFFER}" =~ "### ${(q)PWD}\$" ]] || BUFFER="${BUFFER} ### ${PWD}" 
    zle .accept-line 
} 
zle -N accept-line _-accept-line 

Se añadirá ### ${PWD} a la línea de comandos. No es la mejor solución que podrías usar, pero funciona.

UPD: Respuesta basado en el comentario de @Dennis Williamson:

function zshaddhistory() { 
    print -sr "${1%%$'\n'} ### ${PWD}" 
    fc -p 
} 
+0

Gracias Dennis y Zyx. Funciona como se esperaba. Dennis, es un duplicado. De alguna manera esa pregunta no apareció durante mi búsqueda. Su artículo sobre la historia de bash/zsh es útil e informativo. – Sandeep

+0

¿Puede alguien explicarme por qué 'fc -p' es necesario? ¿Por qué es que cuando no coloco 'fc -p' aquí, la lista de historial gana dos entradas para cada comando (el primero es el que incluye la ruta, y la segunda entrada es simple). –

+0

Estaba luchando con zsh tratando de analizar los caracteres '#', pero me puse en contacto con 'comentimientos interactivos' y estoy contento con esta configuración ahora. Sin embargo, hincha el historial de comandos un poco mientras lo recorres, lo que me entristece. –

3

En lugar de almacenarlo en cada comando añadí lo siguiente a la beginging de mi precmd() para almacenarlo cuando cambio directorios:

if [ "$LAST_DIR" != "$PWD" ] 
    then 
      print -s "##dir## $PWD" 
      LAST_DIR=$PWD 
    fi 

Agrega una línea independiente '## dir ## dir name' al historial cada vez que se ejecuta un comando desde un nuevo directorio.

+1

Me gusta 'print -s" $ PWD # Path "', de esta manera puedo mostrar esta entrada de historia de forma normal, y está lista para que presione Enter para auto-cd a esa ruta (esta es una característica de 'zsh', si solo proporciona una ruta,' cd'/'pushd' es para usted). ** SIN EMBARGO ** Creo que este enfoque es fundamentalmente defectuoso: si tienes dos términos abiertos, cada uno en un directorio diferente, entonces mantén sus respectivos directorios, pero cambia entre ellos emitiendo comandos, no es posible saber qué dirían esos comandos. ¡en! Esto es fallido :( –

Cuestiones relacionadas