第十章、vim 程序编辑器
最近更新日期:2009/08/20

大标题的图示其他 vim 使用注意事项

vim 其实不是那么好学,虽然他的功能确实非常强大!所以底下我们还有一些需要注意的地方要来跟大家分享喔!


小标题的图示中文编码的问题

很多朋友常常哀嚎,说他们的 vim 里面怎么无法显示正常的中文啊?其实这很有可能是因为编码的问题! 因为中文编码有 big5 与 utf8 两种,如果你的档案是使用 big5 编码制作的,但在 vim 的终端接口中你使用的是万国码(utf8), 由于编码的不同,你的中文档案内容当然就是一堆乱码了!怎么办?这时你得要考虑许多东西啦!有这些:

  1. 你的 Linux 系统默认支持的语系数据:这与 /etc/sysconfig/i18n 有关;
  2. 你的终端界面 (bash) 的语系: 这与 LANG 这个变数有关;
  3. 你的档案原本的编码;
  4. 开启终端机的软件,例如在 GNOME 底下的窗口接口。

事实上最重要的是上头的第三与第四点,只要这两点的编码一致,你就能够正确的看到与编辑你的中文档案。 否则就会看到一堆乱码啦!

一般来说,中文编码使用 big5 时,在写入某些数据库系统中,在『许、盖、功』这些字体上面会发生错误! 所以近期以来大多希望大家能够使用万国码 utf8 来进行中文编码!但是在 Windows XP 上的软件常常默认使用 big5 的编码, 包括鸟哥由于沿用以前的文件数据文件,也大多使用 big5 的编码。此时就得要注意上述的这些咚咚啰。

在 Linux 本机前的 tty1~tty6 原本默认就不支持中文编码,所以不用考虑这个问题!因为你一定会看到乱码!呵呵! 现在鸟哥假设俺的文件档案内编码为 big5 时,而且我的环境是使用 Linux 的 GNOME ,启动的终端接口为 GNOME-terminal 软件, 那鸟哥通常是这样来修正语系编码的行为:

[root@www ~]# LANG=zh_TW.big5

然后在终端接口工具栏的『终端机』-->『设定字符编码』 -->『中文 (正体) (BIG5)』项目点选一下, 如果一切都没有问题了,再用 vim 去开启那个 big5 编码的档案,就没有问题了!以上!报告完毕!


小标题的图示DOS 与 Linux 的断行字符

我们在第七章里面谈到 cat 这个指令时,曾经提到过 DOS 与 Linux 断行字符的不同。 而我们也可以利用 cat -A 来观察以 DOS (Windows 系统) 建立的档案的特殊格式, 也可以发现在 DOS 使用的断行字符为 ^M$ ,我们称为 CR 与 LF 两个符号。 而在 Linux 底下,则是仅有 LF ($) 这个断行符号。这个断行符号对于 Linux 的影响很大喔! 为什么呢?

我们说过,在 Linux 底下的指令在开始执行时,他的判断依据是 『Enter』,而 Linux 的 Enter 为 LF 符号, 不过,由于 DOS 的断行符号是 CRLF ,也就是多了一个 ^M 的符号出来, 在这样的情况下,如果是一个 shell script 的程序档案,呵呵~将可能造成『程序无法执行』的状态~ 因为他会误判程序所下达的指令内容啊!这很伤脑筋吧!

那怎么办啊?很简单啊,将格式转换成为 Linux 即可啊!『废话』,这当然大家都知道,但是, 要以 vi 进入该档案,然后一个一个删除每一行的 CR 吗?当然没有这么没人性啦! 我们可以透过简单的指令来进行格式的转换啊!

[root@www ~]# dos2unix [-kn] file [newfile]
[root@www ~]# unix2dos [-kn] file [newfile]
选项与参数:
-k  :保留该档案原本的 mtime 时间格式 (不更新档案上次内容经过修订的时间)
-n  :保留原本的旧档,将转换后的内容输出到新档案,如: dos2unix -n old new

范例一:将刚刚上述练习的 /tmp/vitest/man.config 修改成为 dos 断行
[root@www ~]# cd /tmp/vitest
[root@www vitest]# cp -a /etc/man.config .
[root@www vitest]# ll man.config
-rw-r--r-- 1 root root 4617 Jan  6  2007 man.config
[root@www vitest]# unix2dos -k man.config
unix2dos: converting file man.config to DOS format ...
# 屏幕会显示上述的讯息,说明断行转为 DOS 格式了!
[root@www vitest]# ll man.config
-rw-r--r-- 1 root root 4758 Jan  6  2007 man.config
# 断行字符多了 ^M ,所以容量增加了!

范例二:将上述的 man.config 转成 man.config.linux 的 Linux 断行字符
[root@www vitest]# dos2unix -k -n man.config man.config.linux
dos2unix: converting file man.config to file man.config.linux in UNIX format ...
[root@www vitest]# ll man.config*
-rw-r--r-- 1 root root 4758 Jan  6  2007 man.config
-rw------- 1 root root 4617 Jan  6  2007 man.config.linux

因为断行字符以及 DOS 与 Linux 操作系统底下一些字符的定义不同,因此, 不建议你在 Windows 系统当中将档案编辑好之后,才上传到 Linux 系统,会容易发生错误问题。 而且,如果你在不同的系统之间复制一些纯文本档案时,千万记得要使用 unix2dos 或 dos2unix 来转换一下断行格式啊!


小标题的图示语系编码转换

很多朋友都会有的问题,就是想要将语系编码进行转换啦!举例来说,想要将 big5 编码转成 utf8 。 这个时候怎么办?难不成要每个档案打开会转存成 utf8 吗?不需要这样做啦!使用 iconv 这个指令即可! 鸟哥将之前的 vi 章节做成 big5 编码的档案,你可以照底下的连结来下载先:

在终端机的环境下你可以使用『 wget 网址』来下载上述的档案喔!鸟哥将他下载在 /tmp/vitest 目录下。 接下来让我们来使用 iconv 这个指令来玩一玩编码转换吧!

[root@www ~]# iconv --list
[root@www ~]# iconv -f 原本编码 -t 新编码 filename [-o newfile]
选项与参数:
--list :列出 iconv 支持的语系数据
-f     :from ,亦即来源之意,后接原本的编码格式;
-t     :to ,亦即后来的新编码要是什么格式;
-o file:如果要保留原本的档案,那么使用 -o 新档名,可以建立新编码档案。

范例一:将 /tmp/vitest/vi.big5 转成 utf8 编码吧!
[root@www ~]# cd /tmp/vitest
[root@www vitest]# iconv -f big5 -t utf8 vi.big5 -o vi.utf8
[root@www vitest]# file vi*
vi.big5: ISO-8859 text, with CRLF line terminators
vi.utf8: UTF-8 Unicode text, with CRLF line terminators
# 是吧!有明显的不同吧! ^_^

这指令支持的语系非常之多,除了正体中文的 big5, utf8 编码之外,也支持简体中文的 gb2312 , 所以对岸的朋友可以简单的将鸟站的网页数据下载后,利用这个指令来转成简体,就能够轻松的读取文件数据啰! 不过,不要将转成简体的档案又上传成为您自己的网页啊!这明明是鸟哥写的不是吗? ^_^

不过如果是要将正体中文的 utf8 转成简体中文的 utf8 编码时,那就得费些功夫了! 举例来说,如果要将刚刚那个 vi.utf8 转成简体的 utf8 时,可以这样做:

[root@www vitest]# iconv -f utf8 -t big5 vi.utf8 | \
> iconv -f big5 -t gb2312 | iconv -f gb2312 -t utf8 -o vi.gb.utf8

 
     
http://linux.vbird.org is designed by VBird during 2001-2011. ksu.edu 

本网页主要以Firefox配合解析度 1024x768 作为设计依据     鸟哥自由软件整合应用研究室