vim编码设置方法

vim里面的编码主要跟三个参数有关:enc(encoding), fenc(fileencoding)和fencs(fileencodings)。括号里面的是全写,外面的是简写。

其中fenc是当前文件的编码,也就是说,一个在vim里面已经正确显示了的文件(前提是你的系统环境跟你的enc设置匹配),你可以通过改变 fenc后再w来将此文件存成不同的编码。比如说,我:set fenc=utf-8然后:w就把文件存成utf-8的了,:set fenc=gb18030再:w就把文件存成gb18030的了。这个值对于打开文件的时候是否能够正确地解码没有任何关系。只是说明这份文档以这个字符编码方式编码了。但是打开文件时候vim还能不能用正确的字符编码方案解码不能确定。

fencs就是用来在打开文件的时候进行解码的猜测列表。文件编码没有百分百正确的判断方法,所以vim只能猜测文件编码。比如我的vimrc里面这个的设置是

 1 set enc=utf-8
  2 set fencs=utf-8,gbk,big5,cp936,gb18030,gb2312,utf-16
  3 set fenc=utf-8

所以我的vim每打开一个文件,先尝试用utf-8进行解码,如果用utf-8解码到了一半出错(所谓出错的意思是某个地方无法用utf-8正确地解码),那么就从头来用gbk重新尝试解码,如果gbk又出错(注意gbk并不是像utf-8似的规则编码,所以所谓的出错只是说某个编码没有对应的有意义的字,比如0),就尝试用big5,仍然出错就尝试用cp936。这一趟下来,如果中间的某次解码从头到尾都没有出错,那么 vim就认为这个文件是这个编码的,不会再进行后面的尝试了。这个时候,fenc的值就会被设为vim最后采用的编码值,可以用:set fenc?来查看具体是什么。

至于enc,其作用基本只是显示。不管最后的文件是什么编码的,vim都会将其转换为当前系统编码来进行处理,这样才能在当前系统里面正确地显示出来,因此enc就是干这个的。在windows下面,enc默认是cp936,这也就是中文windows的默认编码,所以enc是不需要改的。在 linux下,随着你的系统locale可能设为zh_CN.gb18030或者zh_CN.utf-8,你的enc要对应的设为gb18030或者 utf-8(或者gbk之类的)。

vim下可以用的关于编码的命令
1.查看当前文件的编码:

:set fenc

2.vim中转换编码:

:set fenc=utf8

然后保存即可。

3.shell转换编码:在没有打开文件情况下对一个文件的编码方案更改。
将一个GBK 编码的文件转换成UTF-8编码

iconv -f gbk -t utf8 file1 -o file2
//gbk原来的编码方案,utf-8是新文件的编码方案, -o选项输出到指定的新文件

说这篇文章的目的是可以用vim来检测文章使用的编码方案,解决乱码的问题,我们都知道乱码是因为编码和解码两个过程用了不兼容或者不同的字符编码方式造成的。
1、:set fenc?就可以检测出用的是什么编码方案。
2、 :set fenc=uft-8或者gbk,gb2312,gb18030这些都行。

你可能感兴趣的:(Linux)