3.4.3 msysGit中shell环境的中文支持

在介绍Cygwin时曾经提到过,msysGit的shell环境的中文支持情况与老版本的Cygwin[1]类似,需要配置才能够录入中文和显示中文。

1.中文录入问题

默认安装的msysGit的shell环境中无法输入中文。为了能在shell界面中输入中文,需要修改配置文件/etc/inputrc,增加或修改相关的配置如下:


disable/enable 8bit input

set meta-flag on

set input-meta on

set output-meta on

set convert-meta off


关闭Git Bash再重启,就可以在msysGit的shell环境中输入中文了。


$echo您好

您好


2.分页器中文输出问题

对/etc/inputrc进行正确的配置之后就能够在shell环境下输入中文了,但是执行下面的命令时会显示乱码。这显然是less分页器命令导致的问题。


$echo您好|less

<C4><FA><BA><C3>


通过管道符调用分页器命令less后,原本的中文输出变成了乱码显示。因为Git使用了大量的less命令作为分页器,这导致Git的很多命令的输出都出现了中文乱码的问题。之所以less命令会导致出现乱码,是因为该命令没有把中文当作正常的字符,可以通过设置LESSCHARSET环境变量将UTF-8编码字符视为正常的字符,于是中文就能正常显示了。下面的操作可以使less分页器中的中文正常显示:


$export LESSCHARSET=utf-8

$echo您好|less

您好


编辑配置文件/etc/profile,将对环境变量LESSCHARSET的设置加入其中,以便于msysGit的shell环境启动时就加载。


declare-x LESSCHARSET=utf-8


3.ls命令显示中文文件名

最常用的用于显示目录和文件名列表的命令ls在显示中文文件名的时候也有问题。下面的命令创建了一个中文名称的文件,文件内容中的中文在显示时没有问题,但是文件名却显示为一串问号。


$echo您好>您好.txt

$cat*.txt

您好

$ls*.txt

????.txt


实际上,只要在ls命令后添加参数—show-control-chars即可正确显示中文:


$ls—show-control-chars*.txt

您好.txt


为方便起见,可以为ls命令设置一个别名,这样就不必在输入ls命令时输入长长的参数了。


$alias ls="ls—show-control-chars"

$ls*.txt

您好.txt


将上面的alias命令添加到配置文件/etc/profile中,可实现在每次运行Git Bash时自动加载。

[1]MSYS是源自于Cygwin1.3的轻量级分支(参考http://www.mingw.org/)。