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的源码,虽然我有追究到底的精神,但我也不是神经。。对于工具的研究适可而止就可以了少年。

编码参数配置就是这样,到此为止,作为底层软件工程师觉得不是很爽,得深入到最底层数据吧。

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

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

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

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

如果想深究,还是一个方法,不怕受罪读编辑器源码吧!

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

时间: 2024-12-23 22:12:34

vim编码方式配置的学习和思考的相关文章

跟着刚哥学习Spring框架--通过XML方式配置Bean(三)

Spring配置Bean有两种形式(XML和注解) 今天我们学习通过XML方式配置Bean 1. Bean的配置方式 通过全类名(反射)的方式   √ id:标识容器中的bean.id唯一. √ class:bean的全类名,通过反射的方式在IOC容器中创建Bean,所以要求Bean中必须有无参的构造器 2.依赖注入的方式 1)属性注入:通过setter方法注入Bean的属性值或依赖的对象 属性注入使用<Property>元素,使用name指定Bean的属性名称,使用value指定Bean的属

跟着刚哥学习Spring框架--通过注解方式配置Bean(四)

组件扫描:Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 特定组件包括: 1.@Component:基本注解,识别一个受Spring管理的组件 2.@Respository:标识持久层组件 3.@Service:标识业务层组件 4.@Controller:标识表现层组件 Spring 有默认的命名策略: 使用非限定类名, 第一个字母小写. 也可以在注解中通过 value 属性值标识组件的名称 当在组件类上使用了特定的注解之后, 还需要在 Spring 的配置文件

JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet

JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet 一.Servlet的传统配置方式 在JavaWeb开发中, 每次编写一个Servlet都需要在web.xml文件中进行配置,如下所示: 1 <servlet> 2 <servlet-name>ActionServlet</servlet-name> 3 <servlet-class>me.gacl.web.controller.ActionServlet</s

Spring学习(五)bean装配详解之 【XML方式配置】

本文借鉴:Spring学习(特此感谢!) 一.配置Bean的方式及选择 配置方式 在 XML 文件中显式配置 在 Java 的接口和类中实现配置 隐式 Bean 的发现机制和自动装配原则 方式选择的原则 最优先:通过隐式 Bean 的发现机制和自动装配的原则. 基于约定优于配置的原则,这种方式应该是最优先的 好处:减少程序开发者的决定权,简单又不失灵活. 其次:Java 接口和类中配置实现配置 在没有办法使用自动装配原则的情况下应该优先考虑此类方法 好处:避免 XML 配置的泛滥,也更为容易.

Python学习之——编码方式

1.各种编码方式 ASCII:http://zh.wikipedia.org/zh-hans/ASCII Unicode:http://zh.wikipedia.org/zh-hans/Unicode UTF-8:http://zh.wikipedia.org/zh/UTF-8 GBK:http://zh.wikipedia.org/zh/%E6%B1%89%E5%AD%97%E5%86%85%E7%A0%81%E6%89%A9%E5%B1%95%E8%A7%84%E8%8C%83 GB_231

java web学习总结(二十一) -------------------模拟Servlet3.0使用注解的方式配置Servlet

一.Servlet的传统配置方式 在JavaWeb开发中, 每次编写一个Servlet都需要在web.xml文件中进行配置,如下所示: 1 <servlet> 2 <servlet-name>ActionServlet</servlet-name> 3 <servlet-class>me.gacl.web.controller.ActionServlet</servlet-class> 4 </servlet> 5 6 <ser

通过Vim+少量插件配置一个高效简洁的IDE

最近本人在看<TCP/IP Illustrated Volume2:The Implementation>这本书,自然要下载4.4BSD-Lite的源代码配合书本一起研读.以前学习Vim的时候就知道Vim可以通过插件的功能来配置一个功能强大的自定义IDE,这次有这么好的机会为什么不利用一下呢?于是在阅读源代码的过程中根据需要一步一步配置了一个简单完整的IDE环境,通过这几天的使用真心觉得Vim好用,速度那个快呀.以前总听别人说Vim如何如何好,这次真的让我感受到了并爱上了Vim这个工具.在这里

转发的别人的vim编码和终端编码的设置

VIM中字符编码的设置             2008-07-24 12:54:18 分类: VIM中,我们可以通过修改/etc/vimrc文件来设置VIM的encoding,我们可以通过:help encoding来察看vim中关于encoding的一些帮助,:help encoding-values可以看到vim支持的encoding的值. vim的encoding设置通常有三个参数: 1.encoding     表示vim自身内部使用的编码方式,如内部缓冲,菜单,消息等的编码方式.如果

编码方式的比较,以及UTF-8,gb2312的选择

经常我们打开外国网站的时候出现乱码,又或者打开很多非英语的外国网站的时候,显示的都是口口口口口的字符, WordPress程序是用的UTF-8,很多cms用的是GB2312. ● 为什么有这么多编码? ● UTF-8和GB2312有什么区别? ● 我们在国内做网站是用UTF-8编码格式还是GB2312编码格式好? 一. 各种编码的来历 可能很多同学一直对字符的各种编码方式懵懵懂懂,根本搞不清为什么他们有这么多编码. ANSI编码 其实在很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合