在 Vim 中,有四个与编码有关的选项,它们是: ''fileencodings''、 ''fileencoding''、 ''encoding'' 和 ''termencoding''。在实际使用中,任何一个选项出现错误,都会导致出现乱码。因此,每一个 Vim 用户都应该明确这四个选项的含义。下面,我们详细介绍一下这四个选项的含义和作用。 
* encoding ''encoding'' 是 Vim 内部使用的字符编码方式。当我们设置了 ''encoding'' 之后, Vim 内部所有的 buffer、寄存器、脚本中的字符串等,全都使用这个编码。 Vim 在工作的时候,如果编码方式与它的内部编码不一致,它会先把编码转换成内部编码。如果工作用的编码中含有无法转换为内部编码的字符,在这些字符就会丢失。因此,在选择 Vim 的内部编码的时候,一定要使用一种表现能力足够强的编码,以免影响正常工作。 由于 ''encoding'' 选项涉及到 Vim 中所有字符的内部表示,因此只能在 Vim 启动的时候设置一次。在 Vim 工作过程中修改 ''encoding'' 会造成非常多的问题。如果没有特别的理由,请始终将 ''encoding'' 设置为 ''utf-8''。为了避免在非 UTF-8 的系统如 Windows 下,菜单和系统提示出现乱码,可同时做这几项设置: #Code syntax="vim" <<--- set encoding=utf-8 set langmenu=zh_CN.UTF-8 language message zh_CN.UTF-8 
* 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'' 的存在。 
* fileencoding 当 Vim 从磁盘上读取文件的时候,会对文件的编码进行探测。如果文件的编码方式和 Vim 的内部编码方式不同, Vim 就会对编码进行转换。转换完毕后, Vim 会将 ''fileencoding'' 选项设置为文件的编码。当 Vim 存盘的时候,如果 ''encoding'' 和 ''fileencoding'' 不一样, Vim 就会进行编码转换。因此,通过打开文件后设置 ''fileencoding'',我们可以将文件由一种编码转换为另一种编码。但是,由前面的介绍可以看出, ''fileencoding'' 是在打开文件的时候,由 Vim 进行探测后自动设置的。因此,如果出现乱码,我们无法通过在打开文件后重新设置 ''fileencoding'' 来纠正乱码。 
* fileencodings 编码的自动识别是通过设置 fileencodings 实现的,注意是复数形式。 fileencodings 是一个用逗号分隔的列表,列表中的每一项是一种编码的名称。当我们打开文件的时候, VIM 按顺序使用 fileencodings 中的编码进行尝试解码,如果成功的话,就使用该编码方式进行解码,并将 ''fileencoding'' 设置为这个值,如果失败的话,就继续试验下一个编码。 因此,我们在设置 ''fileencodings'' 的时候,一定要把要求严格的、当文件不是这个编码的时候更容易出现解码失败的编码方式放在前面,把宽松的编码方式放在后面。 例如, latin1 是一种非常宽松的编码方式,任何一种编码方式得到的文本,用 latin1 进行解码,都不会发生解码失败 —— 当然,解码得到的结果自然也就是理所当然的“乱码”。因此,如果你把 ''latin1'' 放到了 ''fileencodings'' 的第一位的话,打开任何中文文件都是乱码也就是理所当然的了。 以下是滇狐推荐的一个 ''fileencodings'' 设置: #Code syntax="vim" <<--- set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1 --- 其中, ucs-bom 是一种非常严格的编码,非该编码的文件几乎没有可能被误判为 ucs-bom,因此放在第一位。 utf-8 也相当严格,除了很短的文件外 (例如许多人津津乐道的 GBK 编码的“联通”被误判为 UTF-8 编码的经典错误),现实生活中一般文件是几乎不可能被误判的,因此放在第二位。 接下来是 cp936 和 gb18030,这两种编码相对宽松,如果放前面的话,会出现大量误判,所以就让它们靠后一些。 cp936 的编码空间比 gb18030 小,所以把 cp936 放在 gb18030 前面。 至于 big5、euc-jp 和 euc-kr,它们的严格程度和 cp936 差不多,把它们放在后面,在编辑这些编码的文件的时候必然出现大量误判,但这是 Vim 内置编码探测机制没有办法解决的事。由于中国用户很少有机会编辑这些编码的文件,因此我们还是决定把 cp936 和 gb18030 前提以保证这些编码的识别。 最后就是 latin1 了。它是一种极其宽松的编码,以至于我们不得不把它放在最后一位。不过可惜的是,当你碰到一个真的 latin1 编码的文件时,绝大部分情况下,它没有机会 fall-back 到 latin1,往往在前面的编码中就被误判了。不过,正如前面所说的,中国用户没有太多机会接触这样的文件。 如果编码被误判了,解码后的结果就无法被人类识别,于是我们就说,这个文件乱码了。此时,如果你知道这个文件的正确编码的话,可以把 ''fileencodings'' 改成只有这一种编码,阻止任何 fall-back 发生,然后重新打开这个文件。 * fencview 根据前面的介绍,我们知道,通过 Vim 内置的编码识别机制,识别率是很低的,尤其是对于简体中文 (GBK/GB18030)、繁体中文 (Big5)、日文 (euc-jp) 和韩文 (euc-kr) 之间的识别。而对于普通用户而言,肉眼看出一个文件的编码方式也是很不现实的事情。因此,滇狐强烈推荐水木社区的 mbbill 开发的 fencview 插件。该插件使用词频统计的方式识别编码,正确率非常高。点击http://www.vim.org/scripts/script.php?script_id=1708下载。

实用vimrc一份:

set ts=4 
set sw=4 
set expandtab 
set nobackup 
colors desert 
syntax enable 
set tags=/home/eric/Access/8.RTSP_RTP/WorkCodes/tags 
source /usr/share/vim/vim71/mswin.vim 
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1 
set encoding=utf-8

转载于:https://www.cnblogs.com/super119/archive/2010/12/11/1902892.html

vim为何打开文件乱码,而且之后setenc还是乱码?附带实用vimrc一份相关推荐

  1. linux使用vim开启文档,linux 配置 直接用VIM默认打开文件

    方法一:主要 是把gedit 默认打开的文件 都改成 vim了 此方法有缺陷.推荐使用 方法二 可以指定 哪种类型文件 用VIM 默认打开.两种方法都实现了 方便打开文件 摆脱了用VIM编码 打开文件 ...

  2. linux使用vim同时打开文件,VIM 在同一个窗口中同时编辑多个文件

    vim 思维导图 参考 命令 一.如果在终端中开没有打开vim,可以: 横向分割显示: $ vim -o filename1 filename2 纵向分割显示: $ vim -O filename1 ...

  3. Linux Vim基本操作(文件的打开和编辑)完全攻略(有图有真相)

    <Vim三种工作模式>一节给大家详细介绍了 Vim 的 3 种工作模式,本节来学习如何使用 Vim 编辑文件. 首先学习如何使用 Vim 打开文件. Vim 打开文件 使用 Vim 打开文 ...

  4. vim打开文件跳转到上次编辑的位置

    au BufReadPost * if line("'\"") > 0|if line("'\"") <= line(" ...

  5. UltraEdit打开文件,中文显示为乱码的解决方法

    info:UltraEdit版本 27.10.0.132 问题:打开文件,其中中文显示为乱码 解决方法:修改编码格式. 高级 – 设置 – 编码 – 默认编码格式 如果经过如上操作还是显示乱码,也可以 ...

  6. Linux下使用Vim/Vi给文件加密和解密

    本文介绍在Linux下使用Vim/Vi给文件加密和解密的简单方法,Vim的文件加密功能不是很强,但比较实用,因为不必要借助其他软件即可实现. 一. 用 Vim/Vi 加密文件: 用 Vim/Vi 加密 ...

  7. vim vi操作文件

    vim的工作模式 1.正常模式 ①vim <文件名>,打开或者是创建打开一个文件 ②用vim打开一个文件时就是该模式 ③任何模式下按ESC就可进入该模式 ④该模式下可以浏览文件内容 2.编 ...

  8. linux基本命令打开文件,Linux系统操作初体验 通过命令打开txt文件编辑并保存退出...

    在以往白天使用的服务器都是Windows的,操作简单几乎不用在网上找教程就能搞定一个网站从环境搭建到上线所有的动作.就在上周,白天总算也是下定决定使用图1 Linux系统操作 废话不多说,下面白天就来 ...

  9. vim 编辑器 打开GB2312、GBK文件乱码解决方法

    vim 编辑器 打开GB2312.GBK文件乱码解决方法 参考文章: (1)vim 编辑器 打开GB2312.GBK文件乱码解决方法 (2)https://www.cnblogs.com/suibbe ...

最新文章

  1. HDU 4652 Dice:期望dp(成环)【错位相减】
  2. java 微网站_java架构之路-(微服务专题)初步认识微服务与nacos初步搭建
  3. php处理二进制,PHP应用:PHP处理二进制数据的实现方法
  4. block的用法以及block和delegate的比较(转发)
  5. pyqt5 捕获异常确保程序不退出_Python异常处理详解(基础篇十一)
  6. Linux—vim/vi 翻页跳转命令快捷键
  7. owasp testing guide 2014 中文
  8. [转载]PT建站源码(PT服务器原程序)汇总(20100815更新)
  9. C语言的文件读取------C语言
  10. 探索Perl的世界(更新到第十七章57集)
  11. Skype for business之Skype会议直播
  12. 【MMML】多模态机器学习高被引综述论文笔记
  13. 小红书笔记上精选方法技巧有哪些
  14. 生命探测仪能穿墙能探废墟 但不能穿透金属(图)
  15. GPU编程--CPU和GPU的设计区别
  16. 系统之家安装windows虚拟机安装不成功原因及解决方法
  17. C++经典算法题-兔子增长题
  18. 卷积神经网络之目标检测总结
  19. 巨亏超10亿!“汽车金融第一股”易鑫业绩腰斩,上半年却傍上腾讯
  20. 前端接入阿里云外呼SDK

热门文章

  1. php ajax 删除行,php – 使用jQuery Ajax删除mySQL表行
  2. 改性沥青弹性恢复计算_阿里云计算的发展现状是什么,主要的产品有哪些?
  3. windows 只能同时 启动一个_一个u盘能否刻入win 7、win10等多个系统?该怎么做?...
  4. 虚拟的云服务器需要重启吗,虚拟主机重启服务器吗
  5. php 数组合并_PHP数组常用函数分类整理
  6. python爬_python爬虫--模拟登录知乎
  7. Dockerfile----ubuntu-java
  8. 深入理解javascript原型和闭包(12)——简介【作用域】
  9. 厉害了,在Pandas中用SQL来查询数据,效率超高
  10. 13 个 Python 新手练级项目