从 zsh 提示符中删除奇怪的字符

从 zsh 提示符中删除奇怪的字符

我安装了 zsh 5.3 并正在使用它。

现在在 .zshrc 中我做了以下操作 -

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

现在我浏览了一些提示并喜欢其中一个 big_fade

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 线条画和块字符的字体来设置您的终端模拟器。例如,寻找具有 Windows Glyph List 4 (WGL4) 全部功能的字体。

如果你不喜欢块状字符,那么提示设计这是主要的一点不适合你。你本质上是在说你喜欢提示设计,但你不喜欢它所做的独特之处,这是一个矛盾。块字符用于名称“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

(咆哮)-感谢您了解到废除 Debian 中不支持 utf-8 的终端模拟器的提议。我将阅读整个线程,但实际上会说,这不仅仅是终端,而是每个应用程序。应该是utf-8,而且Debian的默认字体应该是utf-8。尽管除非其他事情先就位,否则最后一部分不可能发生。我不必在 .zshrc 中输入 UTF-8 凭据,它们应该是默认体验的一部分。 (/咆哮)

相关内容