Как я могу zsh исключить определенные команды из истории? - PullRequest
4 голосов
/ 04 августа 2011

Как, скажем, те, которые включают слово «производство»?

1 Ответ

4 голосов
/ 04 августа 2011
function zshaddhistory() {
    emulate -L zsh
    if [[ $1 != *"production"* ]] ; then
        print -sr -- "${1%%$'\n'}"
        fc -p
    else
        return 1
    fi
}

Поместите приведенное выше в файл, который будет получен при запуске интерактивной оболочки (до .zshrc или в файл, полученный из .zshrc, как я).

Альтернативная форма (неявное дополнение к истории):

function zshaddhistory() {
    emulate -L zsh
    if [[ $1 = *"production"* ]] ; then
        return 1
    fi
}

. Примечание:

print -sr -- "${1%%$'\n'}"

явно добавляет элемент в историю. Но то же самое неявно делает zsh, если zshaddhistory возвращается с нулевым кодом выхода, поэтому без fc -p и с setopt nohistignoredups nohistignorealldups (который является состоянием по умолчанию) вы увидите ненужные дубликаты в истории.

emulate -L zsh здесь для того, чтобы убедиться, что настройки эмуляции не вступают в действие, и изменить интерпретацию тела функции. Я помещаю эту строку в начало каждой функции, которую я определяю в конфигурации zsh.

...