Mantenga un comando específico alejado del historial del shell

Mantenga un comando específico alejado del historial del shell

Tengo un comando que realmente borra la pantalla en lugar de simplemente desplazarse, como el predeterminado clear, con alias cen mi .zshrc:

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

Mi pregunta es: ¿cómo puedo mantener este comando alejado de mi historial de comandos zsh, de modo que cuando me desplace hacia arriba con la tecla de flecha hacia arriba no lo vea?

Respuesta1

Con set -o histignorespace, las líneas de comando que comienzan con un carácter SPC no se insertan en el historial (aunque siempre puedes recordar el comando que se ingresó inmediatamente antes).

Entonces, si lo logras:

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

E ingrese una línea de comando cuyo primer comando sea c, luego esa línea de comando no se agregará al historial.

Otro enfoque podría ser redefinir el accept-linewidget para que limpie la pantalla y el búfer de edición cuando solo contenga c:

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

Ten en cuenta que solo funcionaría si ingresas cy eso es todo, no c; something-elsepor ejemplo. También lo haría si presionas Enteren el indicador de PS2 como en:

for i do
c

Respuesta2

En bash, también existe un 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` en zsh pero parece fallar con los alias.

Entonces, parece que no hay solución para evitar un alias de cen la historia.

Sin embargo, lo que está haciendo, borrar la ventana actual ( clear) y eliminar el desplazamiento hacia atrás ( printf "\e[3J"), también se podría hacer con otra secuencia de control ANSI:

ESC c               # Full Reset (RIS), VT100.

Entonces, un

printf '\ec'

debería ser suficiente.

Definir un atajo de teclado para eso debería ser simple y evitará almacenar cualquier comando en el historial.

Respuesta3

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)

información relacionada