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 .