Tengo un comando que realmente borra la pantalla en lugar de simplemente desplazarse, como el predeterminado clear
, con alias c
en 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-line
widget 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 c
y eso es todo, no c; something-else
por 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 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` en zsh pero parece fallar con los alias.
Entonces, parece que no hay solución para evitar un alias de c
en 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)