Mantenha o comando específico longe do histórico do shell

Mantenha o comando específico longe do histórico do shell

Eu tenho um comando que realmente limpa a tela em vez de simplesmente rolar, como o padrão clear, com alias cem meu .zshrc:

alias c='clear && printf "\e[3J";'

Minha pergunta é: como posso manter esse comando longe do meu histórico de comandos zsh, para que, quando eu rolar para cima com a tecla de seta para cima, não o veja?

Responder1

Com set -o histignorespace, as linhas de comando que começam com um caractere SPC não são inseridas no histórico (embora você sempre possa recuperar o comando digitado imediatamente antes).

Então, se você conseguir:

set -o histignorespace
alias c=' printf "\e[H\e[3J"'

E insira uma linha de comando cujo primeiro comando seja c, então essa linha de comando não será adicionada ao histórico.

Outra abordagem poderia ser redefinir o accept-linewidget para que ele limpe a tela e o buffer de edição quando contiver apenas c:

accept-line() case $BUFFER in
  (c) printf '\e[H\e[3J'; BUFFER=; zle redisplay;;
  (*) zle .accept-line
esac
zle -N accept-line

Observe que só funcionaria se você entrasse ce pronto, não c; something-elsepor exemplo. Também funcionaria se você pressionasse Enterno prompt do PS2 como em:

for i do
c

Responder2

No bash, a HISTIGNORE='c' doesn't store a command line of a singlec to the memory list of commands. The similarly namedHISTORY_IGNORE in zsh is used to avoid sending the command to the history **file**, which is something different. AHIST_NO_STORE` também existe no zsh, mas parece falhar com aliases.

Então, parece que não há solução para evitar um alias de chistória.

No entanto, o que você está fazendo, limpar a janela atual ( clear) e remover a rolagem ( printf "\e[3J") também pode ser feito com outra sequência de controle ANSI:

ESC c               # Full Reset (RIS), VT100.

Então, um

printf '\ec'

deve ser suficiente.

Definir um atalho de teclado para isso deve ser simples e evitará o armazenamento de qualquer comando no histórico.

Responder3

Method1:

    Just Put one blank space before entering any command it wont be recorded in history

Method2:

    set +o history (After this No command will be recorded  in history)

    set -o history(After this again command will be recorded in history)

informação relacionada