zshプロンプトから奇妙な文字を削除する

zshプロンプトから奇妙な文字を削除する

zsh 5.3をインストールして使用しています。

今私は.zshrcで次のことをしました。

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

今、いくつかのヒントを見つけて、そのうちの1つが好きです。

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エンコーディング出力を認識するように正しく設定されているようです。 (Debianの皆さんを考慮すると良いことです。すでに2016年12月ですね。Debian では、UTF-8 ではなく端末エミュレータを完全に廃止するという提案が再導入されました。。 )しかし、関連文字のフォントサポートが不足して置き換えられます。文字を置き換えるこれは、フォントに実際の線の描画とボックス文字がないためです。

したがって、説明に示すように、これらのUnicode線の描画とブロック文字を含むフォントで端末エミュレータを設定します。たとえば、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

(Hoan Job) - utf-8をサポートしていないDebianのターミナルエミュレータをもう使用しないという提案を聞いてくれてありがとう。私はスレッド全体を読みますが、実際にこれは単なる端末ではなく、すべてのアプリケーションだと言うでしょう。 utf-8でなければならず、Debianのデフォルトフォントはutf-8でなければなりません。他のことが最初に行われない限り、最後の部分は起こり得ません。 .zshrcにUTF-8資格情報を入力する必要はなく、基本環境の一部である必要があります。 (/ノホ)

関連情報