Сохранение текущего каталога в историю ZSH

StackOverflow https://stackoverflow.com/questions/2824051

  •  26-09-2019
  •  | 
  •  

Вопрос

Я хотел достичь такого же, как спросил здесь Сохранение текущего каталога для истории Bash Но в пределах ZSH Shell. Я не сделал никаких упрощенных ZSH, но до сих пор у меня есть:

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

Сейчас я сохраняю команду, аннотируемую с именем каталога к файлу журнала. Это работает нормально для меня. Просто подумал, что может быть способ сделать замену в самом буфере истории.

Это было полезно?

Решение

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

Будет добавить ### ${PWD} к вашей командной строке. Не лучшее решение, которое вы можете использовать, но это работает.

UPD: Ответ на основе комментариев @dennis Williamson:

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

Другие советы

Вместо того, чтобы хранить его на каждой команде, я добавил следующее в службу поддержки My Precmd () для хранения его, когда я меняю каталоги:

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

Добавляет наименовую линию «## DIR ## DIR» в истории каждый раз, когда команда запускается из нового каталога.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top