Como executar o comando sem armazená-lo no histórico (mesmo para a tecla “up”) no zsh

2

As pessoas mencionaram o uso de preexec hook no zsh, mas como exatamente devo usá-lo? Quero dizer, ok, eu posso verificar todos os comandos, seja ou não o comando que eu quero que não apareça na história, mas o que fazer depois disso?

    
por user1685095 11.01.2017 / 21:49

2 respostas

3

Por padrão, zsh sempre mantém o último comando no histórico da sessão, mesmo quando você configura HISTSIZE=0 . Você poderia escrever seu próprio widget para contornar o mecanismo do histórico.

sneaky-run () {   
    echo
    eval $BUFFER
    BUFFER=''
    zle reset-prompt
}

zle -N sneaky-run
bindkey '^X^M' sneaky-run

Este widget sneaky-run executará o comando atualmente digitado, então esvazia o buffer de comando e redefine o prompt. Comandos que são executados em um widget não são adicionados ao histórico.

O echo no início é necessário para que a saída comece em uma nova linha. Se você tiver um prompt de várias linhas, pode ser necessário adicionar mais echo s para cada linha adicional antes de zle reset-prompt , caso contrário, o prompt poderá sobrescrever algumas linhas da saída do comando.

Para este exemplo sneaky-run está ligado à combinação de teclas Ctrl + X , Enter .

Se você não quiser usar uma combinação de teclas extra para isso, você também pode agrupar o widget accept-line , que geralmente é ligado a Enter

accept-line-with-sneaky () {   
    if [[ "$BUFFER" == "${BUFFER#" } ]] ; then
        zle accept-line
    else
        echo
        eval $BUFFER
        BUFFER=''
        zle reset-prompt
    fi
}

zle -N accept-line-with-sneaky
bindkey '^M' accept-line-with-sneaky

Isso imita o comportamento de definir HIST_IGNORE_SPACE : se um comando começar com um espaço, ele não será adicionado ao histórico. Mas com exceção de HIST_IGNORE_SPACE , ele também não estará disponível quando pressão Acima .

Observação: isso substituirá uma das principais combinações de teclas de zsh . Então, por favor, teste cuidadosamente antes de colocar isso no seu ~/.zshrc .

    
por 12.01.2017 / 09:14
1

Você deve usar a opção HIST_IGNORE_SPACE .

setopt HIST_IGNORE_SPACE

ou defina-o no seu perfil e prefixe os comandos que você não deseja armazenar com um espaço.

    
por 11.01.2017 / 21:58