Сохранение текущего каталога в историю Zsh - PullRequest
5 голосов
/ 13 мая 2010

Я хотел добиться того же, что и здесь Сохранение текущего каталога в истории bash , но в оболочке zsh. Я не делал zsh trickry раньше, но пока у меня есть:

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

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

Ответы [ 2 ]

7 голосов
/ 13 мая 2010
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
}
3 голосов
/ 13 октября 2011

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

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

Добавляет отдельную строку "## dir ## dir name" в историю каждый раз, когда команда запускается из нового каталога.

...