热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

当前位置 :| 主页>Linux教程>软件应用>

VIM 文件编码识别与乱码处理

来源: 作者: 时间:2007-12-03 Tag: 点击:
#TITLE: VIM 文件编码识别与乱码处理
 
edyfox

在 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 无法表示的字符时,
这些字符就会丢失。
但如果使用后一种方法,
虽然由于终端所限,
这些字符无法显示,
但在编辑过程中这些字符是不会丢失的。
最新评论共有 4 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册