USR_45

*usr_45.txt*    For Vim version 7.0.  最近更新:2005年3月

                     VIM USER MANUAL - by Bram Moolenaar
                     译者:lang2 http://vimcdoc.sf.net

                             选择你的语言


Vim 中各种的消息可以用多种不同的语言给出。本章就介绍如何改变使用的语言。同时
还讲解如何编辑各种语言的文件。

|45.1|  消息所用语言
|45.2|  菜单所用语言
|45.3|  使用其它编码
|45.4|  编辑其它编码的文件
|45.5|  文本录入

           下一章: |usr_90.txt|  安装 Vim
           前一章: |usr_44.txt|  自定义语法加亮
             目录: |usr_toc.txt|


*45.1* 消息所用语言

当你启动 Vim 时,它会检查环境变量从而找出你所使用的语言。大多数情况下这就够了。 你会看到你所用语言的消息(如果有的话)。要查看当前语言,使用命令: :language 如果你得到 "C" 的输出,表示 Vim 在使用缺省的语言 -- 英语。 备注: 只有当多种语言支持被编译进 Vim 时,你才可能用它来编辑各种不同的语言。 要找出 Vim 是否支持多语种,看一下 ":version" 命令的输出中有没有 "+gettext" 和 "+multi_lang"。如果有的话,表示应该没问题了。如果你看到 "-gettext" 或者 "-multi_lang" 的话你得重找一个 Vim. 如果你想要 Vim 的输出消息也用另外一种语言呢? 有几种可能的办法。你应该使用哪一 种取决于你所使用的系统。 第一种办法是在启动 Vim 前设置环境变量。以 Unix 为例: env LANG=de_DE.ISO_8859-1 vim 只有你的系统支持该语言的时候这才有效。这个办法的好处是所有的 GUI 消息等都会使 用正确的语言。缺点是你必须在启动 Vim 前设定所要用的语言。如果你想在运行 Vim 当中改变所用的语言,你就得使用第二种办法: :language fr_FR.ISO_8859-1 这样你可以尝试使用几种不同的语种名。当你所指定的语言系统不支持时你会得到一个 错误消息。而当所指定语言的消息文件不存在时,你不会被警告。Vim 只会悄悄的使用 缺省的英语。 要找到系统支持的语言,先要找到列出这些语言的目录。在我的系统上,这个目录 是 "/usr/share/locale"。有些系统上是 "/usr/lib/locale"。 "setlocale" 的 man page 应该告诉你该目录在你使用系统的什么地方。 在键入那些语种名的时候要当心,大小写是有区别的,而且 '-' 和 '_' 字符也很 容易被混淆。 你也可以分别为消息,编辑文本和时间等设定所使用的语言。参阅 |:language|. 自 己 动 手 翻 译 消 息 如果翻译的消息没有包括你的语言,你也可以自己写。你得先拿到 Vim 的源代码和 GNU gettext 软件包。在解压缩了源代码后,先读一下 src/po/README.txt。那里有详细的 指导。 翻译本身不是很难的,你不一定要是一个程序员。当然,你必须懂英语和你要翻译 成的语言。 当你对你的翻译满意的时候,可以考虑和其它人共享。上载到 vim-online (http://vim.sf.net) 或者 e-mail 给 Vim 的维护者 Vim <maintainer@vim.org>。 或者两者都做。

*45.2* 菜单所用语言

缺省情况下菜单是英语的。要使用你自己的语言,首先它们得被翻译过。通常情况下菜 单使用的语言会自动被设置成你所用的语言,就像消息一样。你什么也不用做。但是 如果 Vim 不包括你所用语言的菜单的翻译就不行了。 假设你在德国,使用的语言被设为德语。但你更愿意在菜单中看到 "File" 而非 "Datei"。 你可以这样将菜单语言换回英语: :set langmenu=none 也可以指定某一语言: :set langmenu=nl_NL.ISO_8859-1 和上面一样 "-" 和 "_" 是有区别的。然而,大小写在这里可以混淆。 'langmenu' 选项必须在菜单被加载前设置才有效。一旦菜单已经被显示了,再改 变其值就不会直接生效了。因此,你需要把你的设置 'langmenu' 的命令放在你的 vimrc 文件里。 如果你实在想在 Vim 运行当中改变菜单所用的语言,你可以这样作: :source $VIMRUNTIME/delmenu.vim :set langmenu=de_DE.ISO_8859-1 :source $VIMRUNTIME/menu.vim 这样有一个缺陷:所有你自己定义的菜单都不见了。你还得必须重新定义它们。 自 己 动 手 翻 译 菜 单 在下面这个目录可以找到那些已有的菜单翻译: $VIMRUNTIME/lang 翻译文件被称为 menu_{language}.vim. 如果找不到你想使用的语言的翻译,你可以 自行翻译。最简单的办法就是拷贝现存的语言文件并在其基础上做改动。 先用 ":language" 命令找出你现在使用的语言的名称。就用这个名称。名字的所有 字母要小写。将这个文件拷贝到你自己的运行时目录。例如,在 Unix 系统中你应该: :!cp $VIMRUNTIME/lang/menu_ko_kr.euckr.vim ~/.vim/lang/menu_nl_be.iso_8859-1.vim 你会在 "$VIMRUNTIME/lang/README.txt" 文件中找到与翻译相关的更多提示。

*45.3* 使用其它编码

Vim 猜你所要编辑的文件编码和你所用的语言相一致。对于许多欧洲语言而言,编码是 "latin1"。那么每个字节是一个字符。一共可能有 256 个不同的字符。而对于亚洲语言 这就远远不够了。这些语言大多使用双字节编码,从而提供超过一万个可能的字符。即 使如此,如果一篇文本中包括数种语言的文字,这样还是不够。Unicode 就是来解决这 个问题的。其设计允许它包括多种语言中全部的常用字符。它被称为 "替代所有其它编 码的超级编码格式"。但它的使用还很不广泛。 幸运的是,Vim 对这三种编码方式都支持,并且有条件的支持使用与系统环境语言 不一致的文本编码。 当你的系统语言与你所编辑文件用的编码一致时,缺省设定应该没有问题。所以你 什么也不用担心。下面的叙述只是当你想编辑不同的语言时才有关系。 备注: 只有对不同编码格式的支持被编译进 Vim 时这些才有效。检查一下看看 ":version" 命令的输出。如果包括 "+multi_byte" 就没有问题,如果你看到 "-multi_byte" 那你就得找另外一个 Vim. 在 GUI 中 使 用 UNICODE Unicode 一个很方便的特性就是它可以与其它编码格式相会转换而不丢失信息。当你使 Vim 在内部使用 Unicode,你将可以用任何编码编辑文件。 不过,支持 Unicode 的系统还是比较有限的。因此可能你的语言不使用 Unicode。 你得告诉 Vim 你希望使用 Unicode,然后在解决与系统其它部分交互的问题。 我们来启动 GUI 版本的 Vim,这样我们就可以显示 Unicode 字符。这样就行了: :set encoding=utf-8 :set guifont=-misc-fixed-medium-r-normal--18-120-100-100-c-90-iso10646-1 'encoding' 选项告诉 Vim 你所用的字符的编码。该选项使用于缓冲的文本(你正在编辑 的文件),寄存器,Vim 脚本文件等等。你可以把 'encoding' 选项当作是对 Vim 内部 运行机制的设定。 这个例子假设你的系统安装了下面这种字体。例子中的字体名是用于 X-Window 系统 的。这种字体是包括在一个用于增强 xterm 的软件包中的。如果你没有这种字体,你可 以在这里找到: http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz 对于 MS-Windows, 一些字体包含了一些有限的 Unicode 字符。试一下 "Courier New" 字体。你可以通过 Edit/Select Font... 菜单来选择几种字体试试。但是你只能使用 定宽的字体。例如: :set guifont=courier_new:h12 如果不行的话,试着找个字体包。你可以在下面这个地址找到,如果 Microsoft 没把它 移走的话: http://www.microsoft.com/typography/fontpack/default.htm 现在你已经通知了 Vim 在内部使用 Unicode 并用一种 Unicode 字体显示文本。然而, Vim 仍然接受到你输入的原来语言的编码字符。这些字符必须被转换成 Unicode。你可 以通过 'termencoding' 选项值来通知 Vim 要转换的语言。象这样: :let &termencoding = &encoding :set encoding=utf-8 这样就在将 'encoding' 付值为 utf-8 之前把 'encoding' 的旧值付给 'termencoding'. 你得自己试试这个办法在你的系统上行不行得通。当你使用一个为亚洲语言专门设计的 输入法,同时有想编辑 Unicode 文本,这个办法应该工作的很好。 在 UNICODE 终 端 内 使 用 UNICODE 也有直接支持 Unicode 的终端。XFree86 自带的标准 xterm 就是其中之一。我们就用 它作为例子。 首先,Unicode 支持要被编译进 xterm。参阅 |UTF8-xterm|。 用 "-u8" 参数启动 xterm。你可能还需要指定一个字体。例如: xterm -u8 -fn -misc-fixed-medium-r-normal--18-120-100-100-c-90-iso10646-1 现在你就可以在终端内运行 Vim 了。象前面一样将 'encoding' 设定为 "utf-8"。这样 就行了。 在 普 通 终 端 里 使 用 UNICODE 假定你希望编辑 Unicode 文件,但是手头又没有一个支持 Unicode 的终端。你还是可以 用 Vim 这样作,但是那些字符就不能被正确的显示了。文本的编排格式会被保留。 :let &termencoding = &encoding :set encoding=utf-8 这和 GUI 的那个例子一样。但内部工作机制不同:Vim 会把显示的字符转换后再送给 终端程序。 这样屏幕就不会显示一堆毫无意义的字符。 这需要 'termencoding' 和 'encoding' 之间的转换。Vim 会自己处理 latin1 和 Unicode 之间的转化。其它的转换需要将 |+iconv| 特性编译进来。 试着编辑一个含有 Unicode 的文件。你会注意到 Vim 会在那些无法显示的字符处 显示问号(或下划线等)。将光标移动到问号的地方并使用下面的命令: ga Vim 会显示该字符的代码。这样你就会大概知道那个字符是什么。你可以去查 Unicode 表。如果你有很多很多时间的话,你甚至可以这样来阅读一个文件的内容。 备注: 因为 Vim 对所有的文本都使用 'encoding' 选项。改变该选项的值会使所有的非 ASCII 码字符无效。你在使用寄存器和 'viminfo' 文件 (例如,一个被存储的查 找模式) 时就会注意到了。建议在 vimrc 文件里设置 'encoding' 选项,然后就 别再碰它。

*45.4* 编辑其它编码的文件

假定你已经配置 Vim 使用 Unicode 了,你现在想编辑一个 16 位 Unicode 的文件。听 起来很简单,是吗? 事实上,Vim 在内部使用 utf-8 编码,所以 16 为的编码必须被转 换。这样就存在一个字符集 (Unicode) 和编码格式 (utf-8 或 16 位) 的差别。 Vim 会试着用 'fileencodings' 选项中的编码名称检测你在编辑那种文件。当使用 Unicode 时,缺省的选项值是: "ucs-bom,utf-8,latin1". 也就是说 Vim 会检查编辑的 文件看看是下面的编码之一: ucs-bom 文件必须以 Byte Order Mark (BOM) 开始。这允许对 16 位,32 位和 utf-8 Unicode 编码的检测。 utf-8 utf-8 Unicode. 当一个字节序列在 utf-8 中是非法时此设定将被拒绝。 latin1 保证有效的 8 位编码。 当你开始编辑一个 16 位的 Unicode 编码,而该文件有 BOM 时, Vim 会检测到这些并在读 取文件时将其转换为 utf-8 编码。 'fileencoding' 选项 (后面没有 s) 被设为检测到 的值,在本情况下是 "ucs-2le"。 表示是 Unicode, 双字节以及 little-endian 的编码。 这样的文件格式在 MS-Windows 上很常用 (例如,注册表文件)。 当写入文件时,Vim 会比较 'fileencoding' 和 'encoding' 的值。如果它们的值不 同,文本会被转换。 如果 'fileencoding' 的值是空的,意味着不作任何转换。这样文本就会被以 'encoding' 的值来编码。 如果缺省的 'fileencodings' 值不行的话,你可以将其设成你希望 Vim 尝试使用的编码。 只有当一个值无效时下一个才会被使用。将 "latin1" 放到第一位是不行的,因为它永远 都不会是无效的。举个例子,要在文件没有 BOM 也不是 utf-8 编码的时候换回日语: :set fileencodings=ucs-bom,utf-8,sjis |encoding-values| 有建议值。其它的值也可能有效。这取决于系统提供的转换功能。 强 制 编 码 如果编码的自动检测对你不起作用的话,你就得告诉 Vim 你要编辑的文件是什么编码。 例如: :edit ++enc=koi8-r russian.txt "++enc" 部分指定编辑该文件时应该使用的编码。Vim 会把指定的编码 (在这是俄语) 转换为 'encoding'。 'fileencoding' 也会被设为指定的编码,这样当写入文件时 就会发生编码的反转换。 在写入文件时也可以用到一样的参数。这样你事实上可以用 Vim 来转换一个文件。 例如: :write ++enc=utf-8 russian.txt 备注: 转换可能导致字符丢失。在 Unicode 和其他编码之间的相互转换不会有这 个麻烦,除非你有非法字符。当文件包括多于一种语言的字符时,从 Unicode 转换为其它编码很可能会丢失信息。

*45.5* 文本录入

计算机键盘只有那么多键。有些语言包括几千个字符。Unicode 有超过一万。那你怎么才 能输入这些字符呢? 首先,如果你不需要很多的特殊字符,你可以用 digraphs. 这已经在 |24.9| 讲述 过了。 当你使用一种有很多字符的语言,你的键盘应付不了,你就得使用一种输入法(IM)。 这需要学习如何把输入的键变成要输入的字符。你所用的系统很可能已经提供了一种。 Vim 应该可以很好的与其合作。更多的细节请参阅 |mbyte-XIM| (X-Windows) 和 |mbyte-IME| (MS-Windows). 键 图 对于某些语言来说字符集可能不同但是可用的字符数目和拉丁字符集差不多。这样就有可 能在字符和键盘之间定义一个一对一的对应。 Vim 用键图来解决这个问题。 假定你想输入西伯来语,你可以这样载入西伯来语的键图: :set keymap=hebrew Vim 会为你找到一个键图文件。这取决于 'encodings' 选项的值。如果找不到相应的文件, 你会得到一个错误信息。 现在你就可以在插入方式下输入西伯来语了。普通模式下,当你键入 ":",Vim 会自动 切换到英语。你也可以用下面这个命令来在西伯来语和英语之间切换: CTRL-^ 这只在插入模式和命令行模式下才有效。在普通模式下会产生完全不同的效果 (跳转到 alternate 文件)。 如果你打开 'showmode' 选项的话,键图的使用情况会在状态信息里指出。 在 GUI 的 Vim 中这些信息会使用不同的光标颜色。 你可以用 'iminsert' 和 'imsearch' 选项来改变键图的用法。 要查看键图的列表,用这个命令: :lmap 要查看系统有那些键图文件,在 GUI 里你可以用 Edit/Keymap 菜单。否则你可以用: :echo globpath(&rtp, "keymap/*.vim") 自定义键图 你也可以创建你自己的键图。不是很难。从一个和你要使用语言类似的键图开始。将 其拷贝到你的运行时目录。例如,在 Unix 上,你可以用 "~/.vim/keymap" 目录。 键图的文件名必须遵守下面的规则: keymap/{name}.vim keymap/{name}_{encoding}.vim {name} 是键图的名字。选择一个容易识别,又和系统中其它键图不同的名字 (除非你希 望替换一个现存的键图)。名字不能包括下划线。使用的编码名是可选的。 例如: keymap/hebrew.vim keymap/hebrew_utf-8.vim 文件的内容应该很容易理解。看看随 Vim 一起发布的几个键图。更详细的,请参阅 |mbyte-keymap|。 最 后 的 办 法 如果其它的方法都行不通,你可以用 CTRL-V 来输入任何字符: 编码 键入 范围 8-bit CTRL-V 123 十进制 0-255 8-bit CTRL-V x a1 十六进制 00-ff 16-bit CTRL-V u 013b 十六进制 0000-ffff 31-bit CTRL-V U 001303a4 十六进制 00000000-7fffffff 不要输入空格。更详细的,参阅 |i_CTRL-V_digit|。

下一章: |usr_90.txt| 安装 Vim 版权: 参见 |manual-copyright| vim:tw=78:ts=8:ft=help:norl:

Generated by vim2html on 2006年 06月 24日 星期六 00:27:59 UTC