这样设置vim的编码会有问题吗?

Vim、Emacs配置和使用
回复
zjm
帖子: 3
注册时间: 2009-01-07 0:16
送出感谢: 0
接收感谢: 0

这样设置vim的编码会有问题吗?

#1

帖子 zjm » 2009-01-07 0:21

我的locale用的是ZH-CN UTF-8,为了能让vim能正常显示中文,我将.vimrc的相关
部分设成:
let &termencoding=&encoding
set fileencodings=utf-8,gbk,ucs-bom,cp936
我怕设置成这样后用vim修改系统文件时,由于编码的转换可能某些信息会丢失,
从而引起系统出问题,虽然据我所知应该不会有问题,但是我想听听大家的意见!
或许会有更好的方法。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: 这样设置vim的编码会有问题吗?

#2

帖子 eexpress » 2009-01-07 8:52

☎ grep fenc .vimrc
set fencs=utf-8,cp936,gb18030,gbk,gb2312

你的拼写错误了?

set encoding=utf-8
这样吧。系统文件缺省都用utf-8保存的。
● 鸣学
poet
帖子: 2841
注册时间: 2006-09-11 22:47
送出感谢: 0
接收感谢: 4 次

Re: 这样设置vim的编码会有问题吗?

#3

帖子 poet » 2009-01-07 9:07

zjm 写了:我的locale用的是ZH-CN UTF-8,为了能让vim能正常显示中文,我将.vimrc的相关
部分设成:
let &termencoding=&encoding
set fileencodings=utf-8,gbk,ucs-bom,cp936
我怕设置成这样后用vim修改系统文件时,由于编码的转换可能某些信息会丢失,
从而引起系统出问题,虽然据我所知应该不会有问题,但是我想听听大家的意见!
或许会有更好的方法。
设置这个选项时必须明白,vim并不能猜测编码集,它的设定顺序是基于编码错误!
fencs 设置为多个的前提是:对应的编码集能够判定相关错误。目前已知的能够良好的判断编码错误的只有ucs-bom和utf-8,我自己测试euc-cn也可以,那么如果放置其他任何的编码集,就会导致在这个编码集处停止尝试。
gbk,cp936编码集都是不判定错误的。因此,你这种设定当尝试了utf-8发现出错之后就直接使用gbk,完全不可能走到后面的ucs-bom。

我推荐的设置是:set fencs=ucs-bom,utf-8,euc-cn,cp936
实际上这里的cp936目前经测试是肯定在win和linux下都可用,而且正常支持gbk与gb18030编码的。

事实上ee的设置也有类似的问题存在,基于cp936的编码不能判定错误,后面的所有设置都是完全无效的。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: 这样设置vim的编码会有问题吗?

#4

帖子 eexpress » 2009-01-07 9:09

后面的,确实是没有,我是懒得改。看成一个注释吧。
至于深入理解,我可没去作过。
● 鸣学
zjm
帖子: 3
注册时间: 2009-01-07 0:16
送出感谢: 0
接收感谢: 0

Re: 这样设置vim的编码会有问题吗?

#5

帖子 zjm » 2009-01-07 20:19

恩,综和了各方面的信息,现在我把.vimrc改成:
set fileencodings=utf-8,ucs-bom,euc-cn,cp936
let &termencoding=&encoding
因为我也觉得系统文件默认也是utf-8编码的,就把他放最前面了 :em01
zjm
帖子: 3
注册时间: 2009-01-07 0:16
送出感谢: 0
接收感谢: 0

Re: 这样设置vim的编码会有问题吗?

#6

帖子 zjm » 2009-01-07 22:15

这是我从vim的帮助文档看到的内容:
'fileencodings' 'fencs' string (default: "ucs-bom",
"ucs-bom,utf-8,default,latin1" when
'encoding' is set to a Unicode value)
...................................................
The special value "ucs-bom" can be used to check for a Unicode BOM
(Byte Order Mark) at the start of the file. It must not be preceded
by "utf-8" or another Unicode encoding for this to work properly.
An entry for an 8-bit encoding (e.g., "latin1") should be the last,
because Vim cannot detect an error, thus the encoding is always
accepted.
所以我还是接纳poet的推荐,谢谢!
回复

回到 “Vim和Emacs”