사람들은 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.
노트:여기서는 가장 기본적인 키 바인딩 중 하나를 다룰 것입니다 zsh
. 따라서 ~/.zshrc
.
답변2
이 옵션을 사용해야 합니다 HIST_IGNORE_SPACE
.
setopt HIST_IGNORE_SPACE
또는 구성 파일에 설정하고 저장하지 않으려는 명령 앞에 공백을 넣으십시오.