쉘 기록에서 특정 명령을 멀리 유지하십시오.

쉘 기록에서 특정 명령을 멀리 유지하십시오.

my 에 clear별칭이 붙은 기본값처럼 단순히 스크롤하는 대신 실제로 화면을 지우는 명령이 있습니다 .c.zshrc

alias c='clear && printf "\e[3J";'

내 질문은: 이 명령을 zsh 명령 기록에서 멀리하여 위쪽 화살표 키로 위로 스크롤할 때 표시되지 않도록 하려면 어떻게 해야 합니까?

답변1

를 사용하면 set -o histignorespaceSPC 문자로 시작하는 명령줄이 기록에 삽입되지 않습니다(단, 직전에 입력한 명령은 항상 기억할 수 있음).

그래서 당신이 그것을 만든다면 :

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 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)

관련 정보