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
.