正在学习git时,结果发现在commit时无法输入中文了,后来发现在cygwin环境下无法输入中文,网上搜了一把才解决,记录下来,免得以后再找了我的inputrc里面不需要添加,直接去掉下面字段前面的#好即可set meta-flag onset convert-meta offset output-meta onset input-meta on在bashrc中添加export LESSCHARSET=latin1
想了很多种方法要运行我的一个目录下的文件,可是怎么都不行,所有的路最后都锁在了如何在cygwin下输入我的中文目录名?试了很多网上的方法终是不能成行,后来在达人的指点下,终于迷途归返,真可谓道路是曲折的,前途是光明的,^--^。
其实在cygwin下不能输入中文的原因是中文字符的最高位都是1,所以被当作控制符处理了。ok,我们现看下怎么做,然后再看看为什么这么做。
怎么做:如果你的用户目录(/home/XXX)下有了: .inputrc ,
.bashrc/.bash-profile这两个或三个文件,那么恭喜你,你不用建立了,只要做修改就可以了。如果没有,那么麻烦你要建立这三个文件。在Linux下,我们有多种建立文件的方法,可是如果你没有在cygwin下装有vi等编辑器,那么您可以按如下提供的方式建立这三个文件:
(1)从/ect/skel中将这三个文件拷贝到你的用户主目录下。
(2)使用notepad来建立这三个文件,但是很重要的一点是,请您在保存时一定要存成ANSI编码的.txt文件,这一点请一定要记住。
ok,文件现在是建立了,那么就剩下如何修改文件了:(请按ANSI编码格式编写)
(1) 请在.inputrc文件中添加:
set meta-flag on
set convert-meta off
set output-meta on
set input-meta on
set completion-ignore-case on
(2) 请在.bashrc 或.bash-profile文件中添加:
alias ls='ls --show-control-chars --color=auto'
export LESSCHARSET=latin1
修改后请保存成ANSI编码的格式。
ok ,大功告成了。
现在就看看为什么要这么做,cygwin下不能输入中文的原因是中文字符的最高位都是1,所以被当作控制符处理了,meta-flag,convert-meta等选项的意思可以参考man bash。简单的说,设置meta-flag
on允许从终端输入中文,否则的话终端会过滤掉每个字节的最高位;convert-meta off是设置不将中文字符转化为转义序列,因为中文是两个字节表示的,第一字节的最高位是1开头的,可以能同于某个转义字符;output-meta
on就是允许向终端直接输出中文;input-meta on就是允许向终端直接输入中文;set completion-ignore-case on这个可以在 echo A的时候按了后就能由readline给你补出来abc.txt;–show-control-chars也一样。
阅读(2061) | 评论(0) | 转发(0) |