人々はzshでフックを使用していると言いますpreexec
が、正確にどのように使用しますか?私は、すべてのコマンドをチェックして、記録に残したくないコマンドであることを確認できますが、その後は何をすべきですか?
答え1
デフォルトでは、zsh
セッション履歴の最後のコマンドは設定されていても常に保持されますHISTSIZE=0
。記録メカニズムをバイパスするために独自のウィジェットを作成できます。
sneaky-run () {
echo
eval $BUFFER
BUFFER=''
zle reset-prompt
}
zle -N sneaky-run
bindkey '^X^M' sneaky-run
ウィジェットはsneaky-run
現在入力されているコマンドを実行し、コマンドバッファをクリアしてプロンプトをリセットします。ウィジェット内で実行されるコマンドは履歴に追加されません。
echo
出力が新しい行から始まるように最初に必要です。複数行のプロンプトがある場合は、各行のecho
前にsを追加する必要がありますzle reset-prompt
。それ以外の場合、プロンプトはコマンド出力の複数行を上書きする可能性があります。
この例では、sneaky-run
キーの組み合わせCtrl+ X、にバインドしますEnter。
これに追加のキーの組み合わせを使用したくない場合は、accept-line
通常、次のウィジェットをラップすることもできます。Enter
accept-line-with-sneaky () {
if [[ "$BUFFER" == "${BUFFER#" } ]] ; then
zle accept-line
else
echo
eval $BUFFER
BUFFER=''
zle reset-prompt
fi
}
zle -N accept-line-with-sneaky
bindkey '^M' accept-line-with-sneaky
これは設定動作と似ていますHIST_IGNORE_SPACE
。コマンドが空白で始まる場合、履歴に追加されません。ただし、withに加えてHIST_IGNORE_SPACE
式は使用できませんUp。
メモ:ここでは、最も基本的なキーバインディングの1つを扱いますzsh
。したがって~/.zshrc
。
答え2
このオプションを使用する必要がありますHIST_IGNORE_SPACE
。
setopt HIST_IGNORE_SPACE
または、設定ファイルに設定して保存したくないコマンドの前にスペースを入れます。