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/)。