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