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)读出来的是最原始的二进制数据,编辑器在对这些原始数据依据编码格式来解释显示。
假设想深究,还是一个方法。不怕受罪读编辑器源代码吧!
不同的编码格式肯定对于一段同样的二进制数据的解释是不一样的,所以会造成乱码。
vim编码方式配置的学习和思考的更多相关文章
- vim 编码方式的设置
和所有的流行文本编辑器一样,Vim 可以很好的编辑各种字符编码的文件,这当然包括UCS-2.UTF-8 等流行的 Unicode 编码方式.然而不幸的是,和很多来自 Linux 世界的软件一样,这需要 ...
- vim编码方式设置
建议vim的_vimrc文件里设置如下的编码方式: set encoding=utf-8 set fileencodings=ucs-bom,utf-8,cp936 set fileencoding= ...
- .NET 反向代理 YARP 通过编码方式配置域名转发
前面介绍了 YARP 通过配置文件的方式配置代理转发(传送门),而众所周知,微软的一贯作风就是能通过配置文件做的事情,通过编码的方式也能实现!YARP 也不例外,废话不多说,直接上代码! 首先,参照官 ...
- vim编码相关配置
主要与三个参数有有关 fileencoding 缩写:fenc 保存文件时所用的编码 set fenc 查看当前文件的编码 set fenc=utf-8 可以将当前文件转换为utf-8编码 filee ...
- vim编码设置
转载于:http://www.cnblogs.com/freewater/archive/2011/08/26/2154602.html vim 编码方式的设置和所有的流行文本编辑器一样,Vim 可以 ...
- iconv内容,convmv文件名,unix2dos,dos2unix文件格式转换,od/cut/wc/dd/diff/uniq/nice/du等命令,linux文件名乱码,文件名,文件内容,vim编码设置
1.enconv文件名编码转换,比如要将一个GBK编码的文件转换成UTF-8编码,操作如下 enconv -L zh_CN -x UTF-8 filename enconv -L GB2312 -x ...
- 框架源码系列七:Spring源码学习之BeanDefinition源码学习(BeanDefinition、Annotation 方式配置的BeanDefinition的解析)
一.BeanDefinition 1. bean定义都定义了什么? 2.BeanDefinition的继承体系 父类: AttributeAccessor: 可以在xml的bean定义里面加上DTD ...
- 跟着刚哥学习Spring框架--通过注解方式配置Bean(四)
组件扫描:Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 特定组件包括: 1.@Component:基本注解,识别一个受Spring管理的组件 2.@Resposit ...
- 跟着刚哥学习Spring框架--通过XML方式配置Bean(三)
Spring配置Bean有两种形式(XML和注解) 今天我们学习通过XML方式配置Bean 1. Bean的配置方式 通过全类名(反射)的方式 √ id:标识容器中的bean.id唯一. √ cl ...
随机推荐
- Python9-继承2-day25(大年初二)
继承:什么是什么关系组合:什么有什么关系单继承 先抽象再继承,几个类直接的相同代码抽象出来,成为父类 子类自己没有的名字可以使用父类的方法和属性 如果子类自己有,一定先用自己的 在类中使用self的时 ...
- Linux磁盘与文件系统管理 之 认识EXT2系统
1 磁盘组成与分区 1.1 磁盘物理组成 (1)圆形盘片-记录数据 (2)机械手臂及磁头-读写盘片数据 (3)主轴马达-使得机械手臂成功读写数据驱动 1.2 盘片物理组成 (1)扇区-最小物理存储单位 ...
- 【HDU 2126】Buy the souvenirs(01背包)
When the winter holiday comes, a lot of people will have a trip. Generally, there are a lot of souve ...
- 排序算法C语言实现——堆排序
/*堆排nlog(n)*//*堆排复杂度分析1.建堆((n*log(n))/2) 循环n/2次,每次调用HeapAdjust函数 HeapAdjust内部循环log(n)2.调整堆(((n ...
- PAT Basic 1054
1054 求平均值 本题的基本要求非常简单:给定 N 个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个“合法”的输入是 [−1000,1000] 区间内的实数,并且最多精确到小数点后 ...
- Linux下安装Oracle客户端
1.创建用户名和组名 /usr/sbin/groupadd oinstall /usr/sbin/groupadd dba /usr/sbin/useradd -m -g oinstall -G db ...
- CEO的智力财富第12期-《股权激励》学习笔记
卷首语---你现在走的第一步,都藏着你未来的样子 今天,又去参加天使岛举办的系列讲座之股权激励,由律大大律师事务所李刚律师主讲,走在路上,我就在想,我为什么要来参加这样的活动呢?我的本职工作和股权没有 ...
- vmware安装CentOS " Intel VT-x 处于禁用状态"
我刚用虚拟机vmware 11安装CentOS 7 ,出现错误“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题,如下图. Intel VT-x 即Virtualiza ...
- numpy array_split()
numpy.array_split(ary, indices_or_sections, axis=0)[source] Split an array into multiple sub-arrays. ...
- cell展开的几种方式
一.插入新的cell 原理: (1)定义是否展开,和展开的cell的下标 @property (assign, nonatomic) BOOL isExpand; //是否展开 @property ( ...