my 에 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
그게 전부입니다 c; something-else
. Enter다음과 같이 PS2 프롬프트에서 키를 누르면 이 작업이 수행됩니다 .
for i do
c
답변2
bash에서는 HISTIGNORE='c' doesn't store a command line of a single
c to the memory list of commands. The similarly named
HISTORY_IGNORE in zsh is used to avoid sending the command to the history **file**, which is something different. A
HIST_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)