vim的编码详解和中文环境设置
2011-12-20 13:47
288 查看
转载自:http://www.cnblogs.com/lidp/archive/2009/09/03/1697620.html
很惭愧,作为vim的忠实用户,自从2年多前从help里知道了:edit
++enc=xxx这个命令之后,我就没有去了解过vim的编码设定了。这些年来,我遇到编码出错,总是:edit
++enc=xxx。今天:help了一下encoding等,终于搞清楚了相关的各个变量的作用和关系。
简单的说,有三个设置。(我下面基本以中文环境来作为说明)
1) 在.vimrc或者_vimrc里加入set
fileencodings=utf-8,gb2312,gbk,gb18030,big5这句就基本OK了。vim会依次使用这些编码对文件进行编码的猜测。
2) 如果还是不行,那么在打开文件之后,用:edit
++enc=gbk这个命令强制使用某个编码。
3) 如果依然不行,请检查你的$LANG环境变量。
下面是详细的说明。
vim编码主要涉及三个变量。
encoding
vim的内部编码,包括内存数据的编码,vim配置文件的编码。encoding取自变量$LANG,如果$LANG为空,则取latin1。这个编码应该和你的终端编码保持一致的。
fileencoding
文件的编码。vim在加载文件的时候,会把这个编码转换成encoding参数的编码。同样的,保存文件的时候,内存的编码会由encoding转变为fileencoding。
需要注意的是,在vimrc里设置这个参数,不会起作用。因为打开一个文件的时候,fileencodings或者encoding会覆盖fileencoding。关于这个,可以看下面提到的打开文件流程。
fileencodings=utf-8,gbk,gb2312
vim在加载一个文件的时候,会依次尝试使用fileencodings里的编码作为fileencoding。如果全部失败,那么vim会使用encoding作为fileencoding。
另外,如果vim使用了错误的编码,可以使用edit
++enc=gbk这个命令。意思是,重新读取文件,并强制使用gbk作为fileencoding。这时候会忽略filencodings。
以下是一些vim操作的内部流程
打开文件
首先从文件读入数据到内存,然后从fileencodings里依次使用各个编码来尝试转换为encoding。如果有一个成功,则中止尝试。如果找不到,则取encoding作为fileencoding。也就是说,这里有一个从fileencoding转换为encoding的过程。
保存文件
把内存的数据,从encoding,转换为fileencoding,然后写入文件。
其实在这里最容易让人搞不清楚的就是encoding和fileencoding的区别。因为在大多数GUI特别是WINDOWS平台的编辑器里,encoding都是不需要设置的。通常这个encoding都是默认和GUI环境的编码保持一致。encoding是数据在内存里的存储编码,而fileencoding才是文件的编码。
很惭愧,作为vim的忠实用户,自从2年多前从help里知道了:edit
++enc=xxx这个命令之后,我就没有去了解过vim的编码设定了。这些年来,我遇到编码出错,总是:edit
++enc=xxx。今天:help了一下encoding等,终于搞清楚了相关的各个变量的作用和关系。
简单的说,有三个设置。(我下面基本以中文环境来作为说明)
1) 在.vimrc或者_vimrc里加入set
fileencodings=utf-8,gb2312,gbk,gb18030,big5这句就基本OK了。vim会依次使用这些编码对文件进行编码的猜测。
2) 如果还是不行,那么在打开文件之后,用:edit
++enc=gbk这个命令强制使用某个编码。
3) 如果依然不行,请检查你的$LANG环境变量。
下面是详细的说明。
vim编码主要涉及三个变量。
encoding
vim的内部编码,包括内存数据的编码,vim配置文件的编码。encoding取自变量$LANG,如果$LANG为空,则取latin1。这个编码应该和你的终端编码保持一致的。
fileencoding
文件的编码。vim在加载文件的时候,会把这个编码转换成encoding参数的编码。同样的,保存文件的时候,内存的编码会由encoding转变为fileencoding。
需要注意的是,在vimrc里设置这个参数,不会起作用。因为打开一个文件的时候,fileencodings或者encoding会覆盖fileencoding。关于这个,可以看下面提到的打开文件流程。
fileencodings=utf-8,gbk,gb2312
vim在加载一个文件的时候,会依次尝试使用fileencodings里的编码作为fileencoding。如果全部失败,那么vim会使用encoding作为fileencoding。
另外,如果vim使用了错误的编码,可以使用edit
++enc=gbk这个命令。意思是,重新读取文件,并强制使用gbk作为fileencoding。这时候会忽略filencodings。
以下是一些vim操作的内部流程
打开文件
首先从文件读入数据到内存,然后从fileencodings里依次使用各个编码来尝试转换为encoding。如果有一个成功,则中止尝试。如果找不到,则取encoding作为fileencoding。也就是说,这里有一个从fileencoding转换为encoding的过程。
保存文件
把内存的数据,从encoding,转换为fileencoding,然后写入文件。
其实在这里最容易让人搞不清楚的就是encoding和fileencoding的区别。因为在大多数GUI特别是WINDOWS平台的编辑器里,encoding都是不需要设置的。通常这个encoding都是默认和GUI环境的编码保持一致。encoding是数据在内存里的存储编码,而fileencoding才是文件的编码。
相关文章推荐
- vim的编码详解和中文环境设置
- 正确设置 Vim 的字符编码选项 (gVim/Vim on Win32 中文环境)
- 设置vim支持中文编码GB2312和Unicode编码UTF8
- 解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)——ubuntu环境设置默认是utf-8,文件编码可使用Encodersoft批量转换
- JDBC环境设置(中文详解)
- vim中文编码 行号显示等设置
- MyEclipse设置中文编码环境
- Vim + LaTeX-Suite + Skim的配置以及中文环境设置
- vim设置中文环境
- MyEclipse设置中文编码环境
- vim中文编码问题
- MyEclipse编码设置,中文乱码解决方法,UTF-8,GBK
- Centos7设置UTF-8编码,防止中文乱码
- c#或js url传参中文乱码解决方案,web.config 内设置编码格式
- PyQT4文本框中文显示编码问题详解
- JAVA环境变量JAVA_HOME、CLASSPATH、PATH设置详解ZZ 分类: Android安装及配置 2015-01-15 19:39 59人阅读 评论(0) 收藏
- Vim的编码及字体问题详解
- SecureCRT中文乱码解决方法--字符集设置(Linux环境)
- JSP中文乱码问题及编码知识详解
- Windows下JAVA环境变量的设置详解