我有一個命令實際上會清除螢幕,而不是簡單地滾動,就像預設的一樣,在我的中clear
別名為:c
.zshrc
alias c='clear && printf "\e[3J";'
我的問題是:如何使此命令遠離我的 zsh 命令歷史記錄,以便當我使用向上箭頭鍵向上滾動時看不到它?
答案1
使用 時set -o histignorespace
,以 SPC 字元開頭的命令列不會插入到歷史記錄中(儘管您始終可以回憶起先前輸入的命令)。
所以如果你做到了:
set -o histignorespace
alias c=' printf "\e[H\e[3J"'
並輸入第一個命令為 的命令列c
,則該命令列將不會新增至歷史記錄中。
另一種方法可能是重新定義accept-line
小部件,以便在它僅包含以下內容時清理螢幕和編輯緩衝區c
:
accept-line() case $BUFFER in
(c) printf '\e[H\e[3J'; BUFFER=; zle redisplay;;
(*) zle .accept-line
esac
zle -N accept-line
請注意,只有輸入後它才會起作用,僅c
此而已,而不是c; something-else
例如。如果您Enter在 PS2 提示字元下按下,它也會執行此操作,如下所示:
for i do
c
答案2
在 bash 中,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` 也存在於 zsh 中,但似乎因別名而失敗。
c
所以,歷史上似乎沒有辦法避免別名。
然而,您正在做的事情,清除目前視窗 ( clear
) 並刪除回滾 ( printf "\e[3J"
) 也可以使用另一個 ANSI 控制序列來完成:
ESC c # Full Reset (RIS), VT100.
所以,一個
printf '\ec'
應該夠了。
為此定義鍵盤快捷鍵應該很簡單,並且可以避免在歷史記錄中儲存任何命令。
答案3
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)