힌트의 전체 줄을 강조 표시(배경색 설정)할 수 있습니까 zsh
? 내 emacs 구성에서 커서가 있는 줄은 창 배경과 약간 다른 색상으로 되어 있어 시각적으로 도움이 됩니다. 터미널/zsh 프롬프트에서 동일한 작업을 수행하여 실행된 모든 항목 아래에 효과적으로 "선을 그릴" 수 있는지 궁금합니다.
PROMPT='%{$bg[grey]%}# '
내 설정을 시도했지만 .zshrc
강조 표시는 터미널 가장자리가 아닌 내가 입력한 내용까지만 확장됩니다.
내가 이루고 싶은 것이 가능한가?
답변1
RPROMPT를 공백으로 설정해 보십시오. 공백 수는 터미널 너비( #
및 기타 문자 제외)여야 합니다.
답변2
프롬프트 라인*을 사용하여 원하는 것은 무엇이든 할 수 있습니다. 문제는 이를 허용한다는 것입니다.실행 취소후에. 힌트가 강조 표시된 모든 행을 원하지 않는다고 가정합니다.
나중에 줄을 삭제하는 것이 거의 더 쉽지만 명령이 없습니다. 프롬프트를 제거하고 명령을 에코할 수도 있습니다(유사한 의사 프롬프트 사용 $
). ANSI 커서 저장 시퀀스로 프롬프트를 시작한 ESC [s
다음 precmd
이를 복원 ESC [u
하고 커서 뒤의 모든 항목을 지운 다음 ESC [0J
명령을 에코할 수 있습니다(내부적으로 해당 명령을 얻는 방법을 기억할 수 없습니다 precmd
).
*이것은 불완전한 답변입니다. 다른 배경색으로 명령을 강조 표시하는 방법을 모르겠습니다.
답변3
귀하의 예 를 grey
.white
어떤 터미널을 사용하고 있나요? 어쩌면 배경색 삭제를 다르게 처리할까요?
시도해 볼 수 있는 몇 가지 대안은 다음과 같습니다.
전체 프롬프트 줄을 회색 배경으로 설정합니다.
setopt promptsubst
preexec() {
tput sgr0
}
PS1="$(tput setab 7)# "
(예제와 동일해야 하지만 다르게 작성되었습니다.)
프롬프트 앞에 한 줄을 인쇄합니다.
precmd() {
tput smul
for ((n=0; n<COLUMNS; n++)) { printf " "; }
printf "\n"
}
preexec() {
tput sgr0
}
(다음 "\n"
으로 "\r"
변경 하면~해야 한다현재 줄에 밑줄을 긋지만 작동하지 않는 것 같습니다. 프롬프트를 인쇄할 때 zsh가 현재 줄을 삭제하는 것 같아서 첫 번째 해결책을 찾았습니다. )
명령(예: 입력하는 모든 항목)을 굵게 표시합니다.
setopt promptsubst
preexec() {
tput sgr0
}
PS1="# $(tput bold)"