zsh에서 현재 프롬프트 줄을 강조 표시할 수 있나요?

zsh에서 현재 프롬프트 줄을 강조 표시할 수 있나요?

힌트의 전체 줄을 강조 표시(배경색 설정)할 수 있습니까 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)"

관련 정보