位置: 编程技术 - 正文

Linux 本编辑器vim显示utf-8文档乱码的解决方法(linuxvim编辑器的用法)

编辑:rootadmin

推荐整理分享Linux 本编辑器vim显示utf-8文档乱码的解决方法(linuxvim编辑器的用法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:linux的vim编辑器,linux编辑器vi命令,linux vi编辑器常用命令,linux系统vim编辑器,linux的vim编辑器,linux编辑器vi命令,linux的vim编辑器,linuxvim编辑器的用法,内容如对您有帮助,希望把文章链接给更多的朋友!

  在Linux系统操作中,Vim是文本编辑器,在使用Vim的时候,居然显示utf-8文档乱码,遇到这种情况要如何解决呢?下面小编就给大家介绍下Linux如何解决Vim显示utf-8文档乱码问题,一起来看看吧。

  1.相关基础知识介绍

  在Vim中,有四个与编码有关的选项,它们是:fileencodings、fileencoding、encoding和termencoding。在实际使用中,任何一个选项出现错误,都会导致出现乱码。因此,每一个Vim用户都应该明确这四个选项的含义。下面,我们详细介绍一下这四个选项的含义和作用。

  (1)encoding

  encoding是Vim内部使用的字符编码方式。当我们设置了encoding之后,Vim内部所有的buffer、寄存器、脚本中的字符串等,全都使用这个编码。Vim 在工作的时候,如果编码方式与它的内部编码不一致,它会先把编码转换成内部编码。如果工作用的编码中含有无法转换为内部编码的字符,在这些字符就会丢失。因此,在选择 Vim 的内部编码的时候,一定要使用一种表现能力足够强的编码,以免影响正常工作。

  由于encoding选项涉及到Vim中所有字符的内部表示,因此只能在Vim启动的时候设置一次。在Vim工作过程中修改encoding会造成非常多的问题。用户手册上建议只在 .vimrc中改变它的值,事实上似乎也只有在 .vimrc中改变它的值才有意义。如果没有特别的理由,请始终将encoding设置为utf-8。为了避免在非UTF-8的系统如Windows下,菜单和系统提示出现乱码,可同时做这几项设置:

  set encoding=utf-8

  set langmenu=zh_CN.UTF-8

  language message zh_CN.UTF-8

  (2)termencoding

  termencoding是Vim用于屏幕显示的编码,在显示的时候,Vim会把内部编码转换为屏幕编码,再用于输出。内部编码中含有无法转换为屏幕编码的字符时,该字符会变成问号,但不会影响对它的编辑操作。如果termencoding没有设置,则直接使用encoding不进行转换。

  举个例子,当你在Windows下通过telnet登录Linux工作站时,由于Windows的telnet是GBK编码的,而Linux下使用UTF-8编码,你在telnet下的Vim中就会乱码。此时有两种消除乱码的方式:一是把Vim的encoding改为gbk,另一种方法是保持encoding为utf-8,把termencoding改为gbk,让Vim在显示的时候转码。显然,使用前一种方法时,如果遇到编辑的文件中含有GBK无法表示的字符时,这些字符就会丢失。但如果使用后一种方法,虽然由于终端所限,这些字符无法显示,但在编辑过程中这些字符是不会丢失的。

  对于图形界面下的GVim,它的显示不依赖TERM,因此termencoding对于它没有意义。在GTK2下的GVim 中,termencoding永远是utf-8,并且不能修改。而Windows下的GVim则忽略termencoding的存在。

  (3)fileencoding

Linux 本编辑器vim显示utf-8文档乱码的解决方法(linuxvim编辑器的用法)

  当Vim从磁盘上读取文件的时候,会对文件的编码进行探测。如果文件的编码方式和Vim的内部编码方式不同,Vim就会对编码进行转换。转换完毕后,Vim会将fileencoding选项设置为文件的编码。当Vim存盘的时候,如果encoding和fileencoding不一样,Vim就会进行编码转换。因此,通过打开文件后设置fileencoding,我们可以将文件由一种编码转换为另一种编码。但是,由前面的介绍可以看出,fileencoding是在打开文件的时候,由Vim进行探测后自动设置的。因此,如果出现乱码,我们无法通过在打开文件后重新设置fileencoding来纠正乱码。

  简而言之,fileencoding是Vim中当前编辑的文件的字符编码方式,Vim保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。

  (4)fileencodings

  编码的自动识别是通过设置fileencodings实现的,注意是复数形式。fileencodings是一个用逗号分隔的列表,列表中的每一项是一种编码的名称。当我们打开文件的时候,VIM按顺序使用fileencodings中的编码进行尝试解码,如果成功的话,就使用该编码方式进行解码,并将fileencoding设置为这个值,如果失败的话,就继续试验下一个编码。

  因此,我们在设置fileencodings的时候,一定要把要求严格的、当文件不是这个编码的时候更容易出现解码失败的编码方式放在前面,把宽松的编码方式放在后面。例如,latin1是一种非常宽松的编码方式,任何一种编码方式得到的文本,用latin1进行解码,都不会发生解码失败——当然,解码得到的结果自然也就是理所当然的“乱码”。因此,如果你把latin1放到了fileencodings的第一位的话,打开任何中文文件都是乱码也就是理所当然的了。

  以下是网上推荐的一个fileencodings设置:

  set fileencodings=ucs-bom,utf-8,cp,gb,big5,euc-jp,euc-kr,latin1

  其中,ucs-bom是一种非常严格的编码,非该编码的文件几乎没有可能被误判为ucs-bom,因此放在第一位。

  utf-8也相当严格,除了很短的文件外(例如许多人津津乐道的GBK编码的“联通”被误判为UTF-8编码的经典错误),现实生活中一般文件是几乎不可能被误判的,因此放在第二位。

  接下来是cp和gb,这两种编码相对宽松,如果放前面的话,会出现大量误判,所以就让它们靠后一些。cp的编码空间比gb小,所以把cp放在gb前面。

  至于big5、euc-jp和euc-kr,它们的严格程度和cp差不多,把它们放在后面,在编辑这些编码的文件的时候必然出现大量误判,但这是Vim内置编码探测机制没有办法解决的事。由于中国用户很少有机会编辑这些编码的文件,因此我们还是决定把cp和gb放在前面以保证这些编码的识别。

  最后就是latin1了。它是一种极其宽松的编码,以至于我们不得不把它放在最后一位。不过可惜的是,当你碰到一个真的latin1编码的文件时,绝大部分情况下,它没有机会fall-back到latin1,往往在前面的编码中就被误判了。不过,正如前面所说的,中国用户没有太多机会接触这样的文件。

  如果编码被误判了,解码后的结果就无法被人类识别,于是我们就说,这个文件乱码了。此时,如果你知道这个文件的正确编码的话,可以在打开文件的时候使用 ++enc=encoding 的方式来打开文件,如:

  :e ++enc=utf-8 myfile.txt

  上面就是Linux解决Vim显示utf-8文档乱码的方法介绍了,出现该乱码问题后,可通过重新设置fileencodings来解决,希望对你有所帮助。

Linux上如何安装使用音乐软件SoundCloud 对于喜欢音乐的朋友来说,SoundCloud是个不错的音乐软件,SoundCloud是德国的网站,现在也有客户端了,在Linux安装SoundCloud后,就能够在命令行中播放音乐

linux下怎么用tree命令以树形结构显示文件目录结构? 今天小编来给分享Linux系统下一个非常有用的命令的使用:tree命令可以以树形结构显示文件目录结构,它非常适合于我们给别人介绍我们的文件目录的

Linux如何安装使用dstat监控工具以监控系统 Linux系统操作中,用于系统监控的命令有很多(详见系统之家监控Linux系统性能的命令有哪些?),今天小编要给大家介绍下Linux系统监控工具dstat的使用

标签: linuxvim编辑器的用法

本文链接地址:https://www.jiuchutong.com/biancheng/368280.html 转载请保留说明!

上一篇:Linux无网络安装GCC的技巧(需要安装光盘或ISO镜像)(linux安装后没有网卡只有lo)

下一篇:Linux上如何安装使用音乐软件SoundCloud(linux的安装教程)

  • 小微企业企业所得税计算公式
  • 个体工商户税务申报
  • 简易计税方法使用范围
  • 购买库存商品的运输费
  • 小规模纳税人场地租赁
  • 采购的固定资产验收无误后直接安装使用
  • 固定资产可以不设置残值吗
  • 企业销售软件需要结转成本吗
  • 卖二手车
  • 经营二手车怎么交税
  • 支付金融机构手续费计入什么费用
  • 取得抵债资产的相关税费计入
  • 保证金交易收益率
  • 固定资产税前一次性扣除政策中的扣除十点
  • 预付房租收到发票后如何做账
  • 12月份费用可以计提吗
  • 税后扣税
  • 个人开增值税普通发票税率
  • 科目余额表期初借贷一定要相等吗
  • 可持续增长率计算例题
  • 其他综合收益要转入投资收益吗
  • 房地产开发企业的土地使用权计入哪里
  • 财务兼职怎么算工资
  • carrier profile
  • PHP:xml_set_notation_decl_handler()的用法_XML解析器函数
  • php使用pdo连接数据库
  • svchost程序错误怎么修复
  • postman入门
  • 跨年的定额发票可以用吗
  • 提前退休的一次性补贴收入
  • Thinkphp+smarty+uploadify实现无刷新上传
  • zendframework3中文手册
  • 私营独资企业的税收规定
  • 服务业的增值税
  • 一文看懂华为新品发布会
  • 在建工程减值准备借贷方向
  • 独立核算的分公司可以享受小微企业吗
  • 微服务docker打包规范
  • 应收账款计提坏账准备方法
  • mongodb查询表数据
  • 其他科技推广服务业可以加计扣除吗
  • 软件行业的成本核算
  • 城建税小规模纳税人
  • 没有发票的费用支出怎么入账
  • 主营业务收入和销售费用的区别
  • 印花税的计算公式与计算注意事项
  • 实收资本认缴如何做账
  • 固定资产的运输费和包装费计入
  • 小规模纳税人进口货物增值税税率
  • 物业公司代收代缴水电费
  • 外贸采购的职责
  • 企业无力支付票据时应计入
  • 企业单位为职工发放哪些福利
  • 未取得增值税发票措施有哪些
  • 收到保险理赔款计入什么科目
  • 在建工程二级科目待摊支出
  • 期末计提利息怎么算
  • mysql正整数类型
  • sqlserver跨库查询sql回路问题
  • Win7x64下Mysql5.7.18解压版的安装方法
  • centos6.5mini安装教程
  • linux系统干嘛的
  • centos什么命令都说找不到
  • npssvc.exe - npssvc是什么进程 有什么用
  • 在linux操作系统中,/etc/rc.d/init.d
  • win7旗舰版重装系统教程
  • 在linux系统中,用来存在系统所需
  • android开发范例实战宝典
  • js修改css样式属性不生效
  • css浮动和清除浮动
  • js获取指定元素
  • Python HTTP客户端自定义Cookie实现实例
  • jquery点击按钮跳转页面
  • android注入so
  • 全国哪些地区社保比例高
  • 一般纳税人服务费是几个点
  • 报纸的增值税税目是什么
  • 国家税务总局在哪
  • 航信报税
  • 诊所办理要求
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设