打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
debian下vim编码问题和乱码问题
一直以来,经常被debian的编码问题尤其是vim编码问题影响了工作效率,花了点时间研究下,茅塞顿开(其实很多困惑很久的问题认真花几个小时甚至更短时间就可以彻底解决从而大大提高工作效率,但是我们平时往往习惯了忍受它们),发现完全可以实现debian中无乱码显示及在vim中编码自适应,而且只用很简单的配置(最终就是在vimrc中添加4行配置和终端软件修改1个配置)而且终身享用(以后基本不用再修改配置),编码自适应最根本的原理:能自动判断字符的编码,vim可以做到,但终端软件如XShell,SecureCRT,putty都做不到1.系统默认编码:为了和程序包编码兼容和转换,系统最好用zh_CN.UTF-8,因为任意编码可以和utf-8编码之间实现无损转换,安装debian时选择“简体中文”,则用系统默认编码即为zh_CN.UTF-82.用户自己的locale编码:不用设置,既采用系统默认编码,相当于locale也是zh_CN.UTF-83.终端编码:用utf-8,建议用XShell把编码设置成utf-8(虽然SecureCRT也设置成utf-8也可以正确显示,但不能输入汉字)4.程序包编码:很多常见的程序包的输出都是utf-8编码,如pdb,git等5.终端编码,本地locale编码,系统默认编码,程序包编码都是utf-8,这样就会保证系统和程序包中的中文都能正确显示6.vim编码自适应: 也是我们平时我们接触最多,遇到编码总是最多的,我们最希望解决的问题是: 1).不管文件是什么编码,用vim打开后能正确显示和编辑并正确保存 2).新建文件时可以选择某种喜爱的编码 为了解决这些问题,首先讲一下vim编码原理 1).fileencodeings(fencs):文件可能的存储编码集合,赋值例子:set fencs=utf-8,gbk,gb2312,gb18030,cs-bom,cp936,latin1,打开1个文件时,会尝试从前往后用此值的编码来解码,如解码成功,说认为此文件就是此编码,同时把fenc设置成此编码 2).fileencoding(fenc):文件存储编码,赋值例子:set fenc=gbk;打开非空文件时由通过fencs猜测到的编码来设置此值,不可能为空;新建一个文件时fenc为空;保存文件时,如fenc值非空则把enc编码转换为fenc编码来存储,如为空则不进行编码转换,直接用enc编码来存储,涉及到转换 3).encoding(enc):vim内存中的编码,赋值例子:set enc=utf-8; 此值默认取locale的编码,如为空则不对邻层编码做处理,读文件时vim会把fenc的编码转换成enc编码,写文件时vim会把tenc的编码转换成enc编码,涉及到编码转换 4).termencodeings(tenc):shell终端编码,赋值例子:set tenc=utf-8,如此值为空对邻层传过来来的编码为做任何处理,直接传给下一层;如非空则显示文件时会把enc编码转换为tenc编码,接受输入时会把输入的编码转换为tenc,涉及到编码转换 5).终端软件显示字段的编码:终端软件如SecureCRT和XShell,用此编码来显示字符,不进行编码转换,显然如tenc编码与此值不一致, 则显示为乱码 可见vim编码的复杂性,实际上也很简单,类似OSI的网络分层模型,自上而下,下层为上层服务,当把文件中的字符显示到终端软件时,从1)至5);当把由键盘输入到终端软件的字符保存到文件时,从5)至2), 某一层的值为空,则不对由邻层传入来的内容做任何处理,也可以理解编码同邻层,不为空且和邻层编码不同时,则涉及着编码转换,另外4)和5)这层必须设置成一样的编码,这两层之间不涉及到编码转换 基于此原理,打开~/.vimrc加上以下行设置: set fencs=utf-8,gbk,gb2312,gb18030,cs-bom,cp936,latin1 set fenc=gbk #习惯新建文件是某种编码则在此写上此编码 set enc=utf-8 set tenc=utf-8 另外,XShell编码设置成utf-8 #设置成utf-8是为正确显示系统和程序包的中文(因为它们默认是utf-8编码),但如用SecureCRT把此值设置成utf-8后,在命令行和vim输入汉字后就变成了乱码,这个应该是其bug,XShell就不在在这个问题 在vim中编辑1个文件时,随时可以用:set fenc来修改文件存储的编码,非常方便 在vim查看上面4个值的办法,:set 变量名,会显示完整的变量名=值,如如:set fenc,会显示fileencoding=cp936(就是是gbk) 查看某个文件编码的方法:用vim打开,并调用:set fenc即可 其实vim编码自适应最关键的一点是在打开文件时能根据fencs的值来自动判断此文件是什么编码,曾经我也想着如果一个终端软件能够做到这一点就好了,但遗憾的XShell和SecureCRT,putty都不能,不知道其他的行不行 7.其它文本编辑器能不能编码自适应我没有研究过8.未解决的问题 除了vim的程序的输出如果编码与终端软件编码不一致,则显示乱码,最根本的原因是终端软件不能自动判断字符的编码,如果可以的话,那么其他一切编码自适应都是多余的,如vim编码自适应注:此文中vim编码自适应中很多是我个人理解,但完全能自圆其说,解释各种各样的问题,如有争议欢迎来讨论
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VIM乱码原因与解决方案
【转】Vim 字符编码转换
如何解决Ubuntu经常在有中文的地方出现乱码
Xshell更改编码技巧分享
如何查看文件编码格式及转换文件编码?
Python的编码注释#
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服