Ao alternar do bash para o fish no Ubuntu WSL, a codificação de caracteres fica quebrada no vim (e outros apps de terminal). No fish em si, tudo parece bem:
Mas quando abro o vim pelo bash (primeira captura de tela) ou pelo fish (segunda captura de tela), há uma diferença:
Esta é a saída do locale
comando no bash e no fish:
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
Algo no seu fishrc está definido
LC_ALL
como en_US.UTF-8 – um local geralmente válido, mas que não está instalado no seu sistema (como indicam as mensagens "Não é possível definir").Você pode gerar o local usando locale-gen (depois de habilitá-lo via /etc/locale.gen primeiro) ou procurar na configuração do fish por LC_ALL e remover essa configuração para que o fish use o local C.UTF-8.
(Tanto C.UTF-8 quanto en_US.UTF-8 usam a mesma codificação, mas diferem em coisas como ordem de classificação – AZaz vs AaZz – ou formatos de data, etc.)
Como nota geral, LC_ALL não deve ser definido permanentemente; essa é a função de LANG. (Ou seja, LANG é a localidade de base, outras variáveis LC_xxx definem a localidade para recursos individuais, enquanto LC_ALL deve ser apenas uma configuração temporária de "substituir tudo".) Por isso, não é provável que seja uma configuração para todo o sistema; é mais provável que seja seu parâmetro fishrc personalizado.