特定のコマンドをシェルの履歴から除外する

特定のコマンドをシェルの履歴から除外する

デフォルトのように単純にスクロールするのではなく、実際に画面をクリアするコマンドがあります。これは、で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これは、たとえばではなく、入力した場合にのみ機能することに注意してください。次のように PS2 プロンプトで をc; something-else押した場合にも機能します。Enter

for i do
c

答え2

bash では、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` が 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)

関連情報