vim编码涉及四个概念,分别是enc,fenc,fencs,tenc,一般乱码多是因这些参数设置不正确引起的,要想彻底摆脱vim的乱码问题,还是把这四个概念理清楚了,下面详细介绍之。
一、VIM的文本编码选项
①、encoding(简写为enc)
enc的全称为encoding,这是Vim内部使用的编码,如buffer,寄存器中的字符串。在Vim打开文本后,如果它的编码方式与它的内部编码不一致,Vim会先把编码转换成内部编码,如果它用的编码中含有没法转换为内部编码的字符,那么这些字符就会丢失掉。默认值是系统的locale来决定的,比如在windows下一般就是gbk或gb2312的,而在linux下就是utf-8。可以用命令:set enc查看当前vim的enc是什么值,笔者的windows显示的是cp936这里的cp936其实相当于gb2312,指系统的第936号编码格式。
②、fileencoding(简写为fenc)
fenc为当前缓冲区(当前Vim打开这个文件)文件自身的编码,从磁盘读文件时,Vim会对文件编码检查,如果文件的编码与Vim内部编码(enc)不同,Vim就会对文本做编码转换,将fenc设置为文件的编码。Vim写文件到磁盘时,如果enc与fenc不一样,Vim就做编码转换,转换成编码fenc保存文件。在windows下你可以借由notepad++等编辑器检查文件是什么编码的。由于fenc是在打开文件时由Vim自动检测的,所以如果文章中有乱码也没法通过重新设置fenc来纠正,设置fenc只能改变文本的编码格式。
③、fileencodings(简写为fencs)
这是一个字符编码的列表,编码的自动识别就是通过设置fencs实现的。当打开一个文件时,Vim会按照fencs中编码的顺序进行解码操作,如果匹配成功就用该编码来进行解码,并把这种编码设为fenc的值。这里的匹配成功指的是Vim能正确解码,不会出错,但是不保证没有乱码,所以fencs编码列表的顺序设置很关键,由于lanin1是iso8859-1,属于国际化的标准编码,他能表示任何字符,也就用于也不会出错,但是我们看到的可以是“乱码”。 所以一般fencs设置的顺序是这样子的:lan1放到最后面
Vim
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
1
setfileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
④、termencoding(简写为tenc)
终端使用文本编码,或者说是Vim用于屏幕显示时的编码,显示的时候Vim会把内部编码转换为屏幕编码再输出,也就是说我们从屏幕上看到的字符都是tenc编码的字符,如果为空,默认就是enc。windows平台Gvim会忽略掉tenc。一般就是从一个终端远程登陆到linux系统时候tenc会起作用。
二、编码配置(乱码问题的解决)
Vim
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"vim7.1在windows下的编码设置
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
set encoding=utf-8
set fileencodings=utf-8,chinese,latin-1
if has("win32")
set fileencoding=chinese
else
set fileencoding=utf-8
endif
"解决菜单乱码
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
"解决consle输出乱码
language messages zh_CN.utf-8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"vim7.1在windows下的编码设置
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
setencoding=utf-8
setfileencodings=utf-8,chinese,latin-1
ifhas("win32")
setfileencoding=chinese
else
setfileencoding=utf-8
endif
"解决菜单乱码
source$VIMRUNTIME/delmenu.vim
source$VIMRUNTIME/menu.vim
"解决consle输出乱码
languagemessageszh_CN.utf-8
菜单乱码只需要重新source一遍就好了。
博客介绍了Vim编码涉及的四个概念:enc、fenc、fencs、tenc,乱码多因这些参数设置不正确。详细说明了各参数含义及作用,如enc是Vim内部编码,fenc是文件自身编码等。还给出了Vim7.1在Windows下的编码设置及解决菜单、控制台输出乱码的方法。

9620

被折叠的 条评论
为什么被折叠?



