Ich habe einen Befehl, der den Bildschirm tatsächlich löscht, anstatt einfach zu scrollen, wie der Standardbefehl clear
, der c
in meinem als Alias verwendet wird .zshrc
:
alias c='clear && printf "\e[3J";'
Meine Frage ist: Wie kann ich diesen Befehl aus meinem Zsh-Befehlsverlauf fernhalten, sodass ich ihn nicht sehe, wenn ich mit der Pfeiltaste nach oben scrolle?
Antwort1
Mit set -o histignorespace
werden Befehlszeilen, die mit einem SPC-Zeichen beginnen, nicht in den Verlauf eingefügt (Sie können jedoch immer den unmittelbar zuvor eingegebenen Befehl abrufen).
Wenn Sie es also schaffen:
set -o histignorespace
alias c=' printf "\e[H\e[3J"'
Und geben Sie eine Befehlszeile ein, deren erster Befehl lautet c
, dann wird diese Befehlszeile nicht zum Verlauf hinzugefügt.
Ein anderer Ansatz könnte darin bestehen, das accept-line
Widget neu zu definieren, sodass es den Bildschirm und den Bearbeitungspuffer bereinigt, wenn es nur Folgendes enthält c
:
accept-line() case $BUFFER in
(c) printf '\e[H\e[3J'; BUFFER=; zle redisplay;;
(*) zle .accept-line
esac
zle -N accept-line
Beachten Sie, dass es nur funktioniert, wenn Sie „ c
and that's all“ eingeben, nicht c; something-else
beispielsweise. Es funktioniert auch, wenn Sie Enterbei der PS2-Eingabeaufforderung drücken, wie in:
for i do
c
Antwort2
In Bash existiert ein 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` auch in Zsh, scheint aber mit Aliasen fehlzuschlagen.
Es scheint also keine Lösung zu geben, um einen Alias c
in der Historie zu vermeiden.
Was Sie jedoch tun, nämlich das aktuelle Fenster löschen ( clear
) und das Scrollback ( printf "\e[3J"
) entfernen, könnte auch mit einer anderen ANSI-Steuersequenz erfolgen:
ESC c # Full Reset (RIS), VT100.
Also, ein
printf '\ec'
sollte genug sein.
Das Definieren einer Tastenkombination hierfür sollte einfach sein und vermeidet das Speichern von Befehlen im Verlauf.
Antwort3
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)