Eu tenho um comando que realmente limpa a tela em vez de simplesmente rolar, como o padrão clear
, com alias c
em 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-line
widget 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 c
e pronto, não c; something-else
por 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 single
c to the memory list of commands. The similarly named
HISTORY_IGNORE in zsh is used to avoid sending the command to the history **file**, which is something different. A
HIST_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 c
histó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)