역방향 검색으로 여러 줄 터미널 프롬프트가 깨짐

역방향 검색으로 여러 줄 터미널 프롬프트가 깨짐

PS1거기에 넣고 싶다면 \n어떻게 올바르게 설정하나요?

PS1="\[\033[38;5;132m\]\n┌─■ testing\n└─■ \[$(tput sgr0)\]"

현재 내 터미널의 전경색이 실제 프롬프트 색상과 다르기 때문에 역방향 검색(Ctrl+R)을 사용하면 선 색상이 PS1에 지정된 프롬프트 색상이 아닌 전경색으로 재설정됩니다.

데모

답변1

서식이 손실된 줄의 시작 부분에서 이스케이프 인코딩을 반복해야 합니다.

PS1="\[\033[38;5;132m\]\n┌─■ testing\n\[\033[38;5;132m\]└─■ \[$(tput sgr0)\]"

다른 줄도 비슷한 영향을 받을 수 있으므로 각 줄 바꿈 문자 뒤에 이스케이프 코드를 적용하는 것이 가장 좋습니다. 그러나 빈 줄에는 적용할 필요가 없습니다. 그래서 이것이 우리의 결론입니다:

PS1="\n\[\033[38;5;132m\]┌─■ testing\n\[\033[38;5;132m\]└─■ \[$(tput sgr0)\]"

나는 그것을 테스트했고 모든 것이 나에게 효과적이었습니다. (저는 이와 같은 컬러 여러 줄 프롬프트를 한동안 아무 문제 없이 사용해 왔습니다.)

아마도 여기서 일어나는 일은 readline이 줄을 덮어쓴 다음(따라서 색상을 재설정하고) PS1값의 해당 부분만 사용하여 다시 그리는 것입니다. 행에 색상을 명시적으로 적용하지 않으므로 기본 색상(예: 흰색)을 얻게 됩니다.

관련 정보