最近玩gentoo,一度上瘾又一度离弃,然后又因为各种各样的原因强迫着自己回来。不过这段用gentoo所出的问题可真是不少。不过要么调整USE变量(scrot无法截图),要么升级(gcc无法更新),都还是可以解决的。不过这次又出了个问题,就没这么简单了。

源头是这样的,话说gentoo用了几天了,基本上也可以当开发作业系统了。于是就把开发中的ircbot项目clone下来修复了几个bug,然后像往常一样git commit,在打开的vim中输入了修复日志,保存退出,结果却提示

Warning: commit message does not conform to UTF-8.

You may want to amend it after fixing the message, or set the config

variable i18n.commitencoding to the encoding your project uses.

[master c886f55] ���

3 files changed, 27 insertions(+), 12 deletions(-)

看上去好像是说字符编码不对。git log看了下,果然是不对。可是问题出在哪儿呢?想起刚才启动vim输入日志的时候,vim提示“[已转换]”。一般情况下只有编码不对的时候,才会自动转换并这样提示的。于是想是不是vim的问题呢?

问题想到这里,调试起来就比较简单了。换了个编辑器nano测试,这下不乱码了。果然问题出自vim。于是开始拿vim开刀了。

既然是vim的编码问题了,先想到了编辑~/.vimrc,加上一个set encoding=utf8,然后再测试。还是不行,郁闷了。就不知道是什么原因了,想想这几天出的问题都是因为USE变量的问题,会不会还是这个原因呢?

遂即equerry u vim,看看是不是又什么和编码相关的USE又没有弄呢?可是看了看,没有什么USE标记会又这方面影响的啊。

这就太郁闷了,想来想去,同样的~/.vimrc,在Arch下都没问题的,为什么换到这里就出问题了呢?原因只能是一个,那就是gentoo和arch中vim的不同。什么地方不同呢?二进制文件?不会。编译配置不一样?可是USE标记里明明也没有相关的了啊。那就只剩下默认的配置文件了。于是马上操刀去看/etc/vim/vimrc。定位到locale setting这段,发现一个小细节如下:

elseif v:lang =~? “^zh_CN”

set fileencodings=gb2312

set guifontset=*-r-*

endif

分析一下,大概就是说如果lang中有以zh_CN开头,就把fileencoding设置为gb2312。这里就觉得奇怪了,如果是utf8的zh_CN,那我们还怎么会选择用gb2312的fileencoding了呢。于是直接把它修改成utf8,谁让我们用UTF8编码呢?结果这么一改还真奏效了。

问题虽然解决了,不过还是觉得有点不爽。因为为了防止以后更新或者升级的时候这个文件被覆盖掉了,我把他设置在~/.vimrc了,但是这样不奏效。郁闷……留待后面解决吧!

纠正一下,原来在~/.vimrc设置fileencodings变量是有效的,只是我自己拼错了,写成了fileencoding,在此更正!(PS:这vim的变量,也太……)