zsh 프롬프트에서 이상한 문자 제거

zsh 프롬프트에서 이상한 문자 제거

zsh 5.3을 설치해서 사용하고 있습니다.

이제 .zshrc에서 다음을 수행했습니다.

autoload -Uz compinit promptinit
compinit
promptinit
# End of lines added by compinstall

이제 몇 가지 팁을 찾아보고 그 중 하나가 마음에 들었습니다.

big_fade는 다음과 같습니다 -

۲��shirish@think-debian���۲�� Mon Dec 26 02:24:01am
/usr/share/zsh/functions/Prompts>

프롬프트에 대한 내장 코드는 /usr/share/zsh/functions/Prompts/prompt_bigfade_setup에 있습니다.

/usr/share/zsh/functions/Prompts> cat prompt_bigfade_setup
# Generic large colour fade-bar prompt theme from bashprompt
# Created by James Manning <[email protected]>
# Changed by Spidey 08/06
# Converted to zsh prompt theme by <[email protected]>

prompt_bigfade_help () {
  cat <<EOH
This prompt is color-scheme-able.  You can invoke it thus:

  prompt bigfade [<fade-bar> [<userhost> [<date> [<cwd>]]]]

where the parameters are the colors for the fade-bar, user@host text,
date text, and current working directory respectively.  The default
colors are blue, white, white, and yellow.  This theme works best with
a dark background.


Recommended fonts for this theme: either UTF-8, or nexus or vga or similar.
If you don't have any of these, the 8-bit characters will probably look
stupid.
EOH
}

prompt_bigfade_setup () {
  local fadebar=${1:-'blue'}
  local userhost=${2:-'white'}
  local date=${3:-'white'}
  local cwd=${4:-'yellow'}

  local -A schars
  autoload -Uz prompt_special_chars
  prompt_special_chars

  PS1="%B%F{$fadebar}$schars[333]$schars[262]$schars[261]$schars[260]%B%F{$userhost}%K{$fadebar}%n@%m%b%k%f%F{$fadebar}%K{black}$schars[260]$schars[261]$schars[262]$schars[333]%b%f%k%F{$fadebar}%K{black}$schars[333]$schars[262]$schars[261]$schars[260]%B%F{$date}%K{black} %D{%a %b %d} %D{%I:%M:%S%P}$prompt_newline%B%F{$cwd}%K{black}%d>%b%f%k "
  PS2="%B%F{$fadebar}$schars[333]$schars[262]$schars[261]$schars[260]%b%F{$fadebar}%K{black}$schars[260]$schars[261]$schars[262]$schars[333]%F{$fadebar}%K{black}$schars[333]$schars[262]$schars[261]$schars[260]%B%F{$fadebar}>%b%f%k "

  prompt_opts=(cr subst percent)
}

prompt_bigfade_preview () {
  if (( ! $#* )); then
    prompt_preview_theme bigfade
    print
    prompt_preview_theme bigfade red white grey white
  else
    prompt_preview_theme bigfade "$@"
  fi
}

prompt_bigfade_setup "$@"

이제 이 모든 것이 훌륭하지만 프롬프트에 몇 가지 변경 사항을 적용하고 싶습니다. 예를 들어 특수 기호 '2��'는 필요하지 않습니다.

또한 마지막 프롬프트는 >로 끝납니다. $(bash와 유사)로 끝나기를 원합니다. 누구든지 도와줄 수 있나요?

답변1

이 테마에 권장되는 글꼴: UTF-8, nexus, vga 또는 이와 유사한 글꼴. 
이것이 없으면 8비트 문자가 어리석게 보일 수 있습니다.

대본에서 그 댓글을 읽었죠? ☺

모듈 은 보시다시피 프롬프트에서 사용되는 다양한 문자의 출력 시퀀스를 포함하는 prompt_special_chars배열 변수를 설정하고 있습니다 . schars주로 선화와 블록 문자입니다. 이 prompt_special_chars모듈은 현재 보고 있는 모듈 바로 옆에 있습니다.

prompt_special_chars귀하의 터미널(에뮬레이터)은 이러한 문자열에 입력된 UTF-8 인코딩 출력을 인식하도록 올바르게 구성되어 있는 것 같습니다. (데비안 여러분을 고려하면 좋은 일입니다. 벌써 2016년 12월이군요.데비안에서 UTF-8이 아닌 터미널 에뮬레이터를 완전히 폐지하겠다는 제안이 다시 도입되었습니다.. ) 그러나 관련 문자에 대한 글꼴 지원이 부족하여 대체됩니다.문자 바꾸기글꼴에 실제 선 그리기 및 상자 문자가 없기 때문입니다.

따라서 설명에 나와 있듯이 이러한 유니코드 선 그리기 및 블록 문자가 포함된 글꼴로 터미널 에뮬레이터를 설정하십시오. 예를 들어 WGL4(Windows Glyph List 4)의 전체 기능을 갖춘 글꼴을 찾으세요.

뭉툭한 캐릭터가 마음에 들지 않는다면 디자인을 위한 팁이것이 요점이다당신을 위해서가 아닙니다. 본질적으로 당신은 즉각적인 디자인을 좋아하지만 그것이 독특하다는 것을 좋아하지 않는다고 말하는 것입니다. 이는 모순입니다. 블록 문자는 "bigfade"라는 이름에서 "색상 퇴색" 효과에 사용됩니다.

답변2

@jdeBP - 첫 번째 단서를 제공해 주셔서 감사합니다.

이것은 내가 얻는 결과입니다 -

zsh 프롬프트에 이상한 문자가 나타납니다

그런 다음 글꼴이 없는지 살펴보았습니다.

> aptitude search xfonts-nexus
i   xfonts-nexus                                                       - Nexus font for X 

글꼴이 있다는 것을 알고 남은 유일한 가능성은 콘솔입니다. 즉, .zsh는 utf-8을 사용해야 한다는 말을 듣지 않았으며 이는 다음으로 확인되었습니다.

> locale
LANG=en_IN
LANGUAGE=en_IN:en
LC_CTYPE="en_IN"
LC_NUMERIC="en_IN"
LC_TIME="en_IN"
LC_COLLATE="en_IN"
LC_MONETARY="en_IN"
LC_MESSAGES="en_IN"
LC_PAPER="en_IN"
LC_NAME="en_IN"
LC_ADDRESS="en_IN"
LC_TELEPHONE="en_IN"
LC_MEASUREMENT="en_IN"
LC_IDENTIFICATION="en_IN"
LC_ALL=

이 사실을 깨닫고 나서 내가 무엇을 해야 하는지 알았습니다.Linux 콘솔에서 UTF-8 지원을 활성화하는 방법은 무엇입니까?@GAD3R의 답변입니다.

방금 다음 비트를 추가했습니다.

/home/shirish> cat ~/.zsh/.zshrc | grep UTF-8 
export LC_ALL=en_IN.UTF-8
export LANG=en_IN.UTF-8
export LANGUAGE=en_IN.UTF-8

프롬프트에 대한 다음 비트를 찾으십시오 -

/home/shirish> source ~/.zsh/.zshrc

그리고 올바른 메시지를 받았습니다 -

아름다운 색상의 팁

해당 로케일을 보는 것도 좋습니다. 이제 정확합니다.

/home/shirish> locale
LANG=en_IN.UTF-8
LANGUAGE=en_IN.UTF-8
LC_CTYPE="en_IN.UTF-8"
LC_NUMERIC="en_IN.UTF-8"
LC_TIME="en_IN.UTF-8"
LC_COLLATE="en_IN.UTF-8"
LC_MONETARY="en_IN.UTF-8"
LC_MESSAGES="en_IN.UTF-8"
LC_PAPER="en_IN.UTF-8"
LC_NAME="en_IN.UTF-8"
LC_ADDRESS="en_IN.UTF-8"
LC_TELEPHONE="en_IN.UTF-8"
LC_MEASUREMENT="en_IN.UTF-8"
LC_IDENTIFICATION="en_IN.UTF-8"
LC_ALL=en_IN.UTF-8

(호언장담) - utf-8을 지원하지 않는 데비안의 터미널 에뮬레이터를 더 이상 사용하지 않겠다는 제안을 들어주셔서 감사합니다. 나는 전체 스레드를 읽을 것이지만 실제로 이것은 단지 터미널이 아니라 모든 애플리케이션이라고 말할 것입니다. utf-8이어야 하고 데비안의 기본 글꼴은 utf-8이어야 합니다. 다른 일이 먼저 이루어지지 않는 한 마지막 부분은 일어날 수 없습니다. .zshrc에 UTF-8 자격 증명을 입력할 필요가 없으며 기본 환경의 일부여야 합니다. (/노호)

관련 정보