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

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

기본 화면처럼 단순히 스크롤하는 대신 실제로 화면을 지우는 명령이 있습니다. 내 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전부입니다. PS2 프롬프트에서 다음과 같이 누르면 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)

관련 정보