vim字符编码终极方案

来源:互联网 发布:淘宝旺铺基础班 编辑:程序博客网 时间:2024/04/29 23:05



vim经常遇到文件乱码的情况,很多的文章都只是解决了作者遇到的乱码问题,不同的使用者由于环境不一样,参考之后,反而更加混淆和复杂。
其实vim乱码是与系统环境非常相关的,一味执着于修改vim的配置而不知道分析系统的实际环境,往往导致混淆,本文从原理分析vim编码的设计和乱码原因,帮助所有的用户解决vim的乱码。

vim为何会出现乱码:
1.首先是输入,vim以错误的格式解析文件,比如原本是utf-8,但以ansi解析,那必然是乱码了。
2.然后是处理,vim以错误的格式处理文件,比如原本是utf-8,但内部以ansi保存处理,导致乱码。
3.然后是输出,vim输出显示的编码与系统不一致,也会乱码。
4.最后是写入,vim回写文件与打开的不一致,造成编辑后文件乱码。

vim与编码相关的参数:
1.fileencoding,用于配置打开文件和保存文件的编码,但只能有一个值,只适合少数文件都是同种编码的环境,所以一般不使用
2.fileencodings,从名字上看就知道是fileencoding的增强版,可以配置多种不同的编码,常见的配置为,配置好之后,列表中的文本编码只要合法,都能被vim正确的读取,建议配置:
set fileencodings=utf-bom,utf-8,gbk,gb2312,gb18030,cp936,latin1
3.encoding,vim内部编码,vim读取文件之后,但并不以读取文件的编码来处理,而是会转换成内部编码的格式,这个编码一般与操作系统相关,linux下utf-8居多,中文windows下则是gdk,建议配置:
set encoding=utf-8
4. termencoding,vim输出的编码,输出指输出到操作系统或命令终端等,默认与操作系统的语言编码一致,如果使用linux命令终端,建议终端和linux系统配置相同的编码,然后配置相同的termencoding,否则顾全了vim就顾不上shell,不过如果shell不存在中文名文件,则配置终端和termencoding一致即可,对于windows,能自动的识别gbk和utf-8,不用特殊配置,建议配置:
set termencoding=utf-8
5.fileformats,用于区分操作系统,主要是回车\r\n的区别,建议配置:
set fileformats=unix,dos

在分析了乱码原因,了解了vim编码的参数之后,就可以根据实际情况来配置了
1.分析文件编码,配置vim文件文件解析编码fileencodings,让vim能解析出来
2.分析系统编码,配置vim内码encoding,如果linux系统语言为ansi,则必须配置内码,否则vim无法处理中文,中文windows下vim内码为gbk,但还是建议统一配置为utf-8
3.根据输出配置显示编码,linux系统如果使用了putty或者SecureCRT,需要注意配置termencoding和终端软件一致,windows系统比较少有终端软件,系统能自动解析gdb和utf-8,建议统一配置为utf-8

参考的vim编码配置如下,linux和windows配置相同,linux系统语言编码和ssh终端编码配置为utf-8,windows则不需要配置,即可正常的打开utf-8,gdk等编码的文件

" ******** file encode ********" unix or dos file
set fileformats=unix,dos
" euc-cn is alias to gb2312
set vi inside coding, must be set when you use gbk or utf-8
set encoding=utf-8
" actual file encoding, will set as it except fileencodings load other
" set fileencoding=gb2312
set fileencodings=utf-bom,utf-8,gbk,gb2312,gb18030,cp936,latin1
" terminal encoding
" even if you set utf-8 in ssh client
set termencoding=utf-8
0 0
原创粉丝点击