vim编码方式配置的学习和思考

哎呀呀,今天9月30号,立即就要十一长假了,心里还有点小小浮躁。工作已经基本做完,想成为技术大牛怎么能够如此浮躁。为了应付浮躁的心灵,决定写一篇小博,平静一把。

今天一个配置文件须要有中文,而且同事是在windows下使用,我在ubuntu下使用,当然是伟大的vim了。肯定会遇到中文编码格式的问题,须要配置一下vimrc。

这里也正好研究一下vim的编码配置设置。记录在此。以备后忘。

vim里面的字符编码主要跟三个參数有关:enc(encoding), fenc(fileencoding)和fencs(fileencodings)



fenc是当前文件(打开已有文件以及新建文件)的编码。你能够通过改变 fenc后再w来将此文件存成不同的编码。比方说,我:set fenc=utf-8然后:w就把文件存成utf-8的了。:set fenc=gbk再:w就把文件存成gbk的了。

这个值对于打开文件的时候是否可以正确地解码没有不论什么关系。

fencs就是在打开已有文件的时候进行解码的推測列表,这个值是在vimrc中写死的,文件编码没有百分百正确的推断方法。所以vim仅仅能推測文件编码。比方我的vimrc里面这个的设置是

set fileencodings=utf-8,gbk



所以我的vim每打开一个文件,尝试fencs列表中的解码格式进行解码。假设中间的某次解码从头到尾都没有出错,那么 vim就觉得这个文件是这个编码的,不会再进行后面的尝试了。

这个时候,fenc的值就会被设为vim最后採用的编码值,vim下进入命令行模式用set fenc来查看当前已有文件的编码格式。

当然这个也是有可能出错的。比方你的文件是gbk编码的,可是实际上仅仅有一两个字符是中文。那么有可能他们正好也能被utf-8解码,那么这个文件就会被误觉得是utf-8的导致错误解码。

enc,其作用是vim的显示编码格式。

无论最后的文件是什么编码的,vim都会将其转换为当前系统编码来进行处理,这样才干在当前系统里面正确地显示出 来,enc就是干这个的。

这3个參数fencs fenc enc都能够在vim的命令行模式下set fencs/fenc/enc查看。

从打开一个已有文件的过程来看这3个參数的差别,首先vim或利用fencs列表去匹配解码文件,正确解码后就设置fenc为当前解码格式,解码完毕呢,接着会做一个转码,将文件转为enc所指的编码格式来显示出来。

这就是这3个配置參数的作用。

将gbk格式文件用vim打开,默认编码格式utf8,打开时在vim下部会显示converted。表示编码格式已转换。

打开创建新文件,当然默认的编辑模式是在使用enc指定的编码格式,通常是utf8的,保存文件时我们能够使用fenc指定当前文件编码格式,如set fenc=gbk。就能够实现windows下的正确显示了。

显示编码格式是enc,当前文件编码格式是fenc,vim支持的编码格式是fenc,这中间牵扯到文件格式到显示格式的转换,这样就去分开了。

当然。假设想深入研究,最好的办法看vim的源代码,尽管我有追究究竟的精神,但我也不是神经。

。对于工具的研究适可而止就能够了少年。

编码參数配置就是这样,到此为止,作为底层软件project师认为不是非常爽,得深入到最底层数据吧。

深入思考一下,编码格式utf8 gbk是针对于文本文件来说的,编码格式是什么意思。

文件本来就是躺在存储器里的一段数据,数据就是01010111的二进制。二进制数据本身是没有意义的。可是编码赋予了这段数据意义。

文本文件差别于二进制文件就是编码层次。在中间有一编解码层,这一层应该是各个编辑器如vim emacs须要做的工作。

由于对于应用编程,最底层的读写函数(read write)读出来的是最原始的二进制数据,编辑器在对这些原始数据依据编码格式来解释显示。

假设想深究,还是一个方法。不怕受罪读编辑器源代码吧!

不同的编码格式肯定对于一段同样的二进制数据的解释是不一样的,所以会造成乱码。

上一篇:[转]Net Framework引路蜂地图开发示例


下一篇:Centos下Vim编辑器基本配置