在 Ubuntu WSL 中从 bash 切换到 fish 时,vim(和其他终端应用程序)中的字符编码会损坏。在 fish 本身中,一切看起来都很好:
但是当我从 bash(第一个屏幕截图)或 fish(第二个屏幕截图)打开 vim 时,出现了区别:
这是 bash 和 fish 中命令的输出locale
:
jan@HSD-PF540YBG:~$ locale
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=
jan@HSD-PF540YBG:~$ fish
Welcome to fish, the friendly interactive shell
Type help for instructions on how to use fish
~ > locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
您的 fishrc 中的某些内容设置为 en_US.UTF-8 – 这是一个通常有效的语言环境,但您的系统上未安装
LC_ALL
该语言环境(如“无法设置”消息所示)。您可以使用 locale-gen 生成语言环境(首先通过 /etc/locale.gen 启用它),或者在您的 fish 配置中搜索 LC_ALL 并删除该设置以使 fish 使用 C.UTF-8 语言环境。
(C.UTF-8 和 en_US.UTF-8 都使用相同的编码,但它们在排序顺序(AZaz 与 AaZz)或日期格式等方面有所不同。)
一般而言,LC_ALL 根本不应该永久设置;这是 LANG 的工作。(也就是说,LANG 是基本语言环境,其他 LC_xxx 变量为各个功能设置语言环境,而 LC_ALL 应该只是一个临时的“覆盖所有”设置。)因此,它不太可能是系统范围的设置;更可能是您的自定义 fishrc 参数。