Chinaunix首页 | 论坛 | 博客
  • 博客访问: 206191
  • 博文数量: 32
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 295
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-06 20:47
文章分类

全部博文(32)

文章存档

2009年(11)

2008年(21)

我的朋友

分类: LINUX

2008-12-07 22:29:52

在 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'' 的存在。



阅读(2849) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-12-11 04:21:30

1楼那位朋友,请看清楚博主说的的内容再发言.. 回帖要负责

chinaunix网友2008-12-09 19:22:00

LS的这位朋友,我用你的方法vim中的乱码就不能直接修改过来 文章中的方法是可行的

chinaunix网友2008-12-09 12:04:20

乱说 你去windows下开一个utf8编码的中文,用vim打开以后就是乱码 直接 set encoding=cp936以后就正常了 所以是可以随时修改的 而非只能在vim启动的时候设置一次 转贴要负责,最好自己实验下