arabic.txt 适用于 Vim 9.2 版本。 最近更新: 2025年10月
VIM 参考手册 by Nadim Shaikli
译者: Willis
Vim 的阿拉伯语支持 (选项和映射) Arabic
E800
要使用从右到左书写和阿拉伯语映射的支持,编译 Vim 时必须加入 +arabic 特性。
这些功能由 Nadim Shaikli <nadim-at-arabeyes.org> 编写。
本文件最好在 Vim 的 GUI 版本里用以下设置阅读:
:set encoding=utf-8
:set arabicshape
简介
阿拉伯语是一种对多项特殊特性有较高要求的语言。其字符从右到左书写,在屏幕上显示
应当从右到左排列。阿拉伯语还要求字型重整: 同一个字符在单词的不同相对位置 (词
首,词中,词尾或单独出现) 时,会呈现不同的字形。此外,阿拉伯语也需要支持两种不
同的组合形式。在某些情况下,需要将多达两个的字符叠加 (superimpose) 到另一个字
符上 (组合),而在另一些情况下,则需要将两个字符实际替换为一个新字符 (合并)。最
后,要正确地显示阿拉伯语,不仅需要 ISO-8859-6 (U+0600-U+06FF) 字体,还需要 B-
表现型 (U+FE70-U+FEFF) 字体,这两者都属于所谓的 ISO-10646-1 字体的一部分。
命令、提示和帮助文件并非用阿拉伯语书写,确保用户界面和标准 Vi 界面保持一致。
特色
o 编辑从左到右的文件时,无需改变 Vim 原有的编辑方式,
o 可在从右到左窗口中查看和编辑文件。每个窗口的文本书写方向彼此独立,因而可以
同时以从右到左和从左到右两种模式察看同一个文件 (这有助于编辑混合两种书写方
向的文本)。
o 无需终端对从右到左能力的特别支持。这些功能的支持完全独立于硬件。只需提供阿
拉伯语字体即可。
o 和原有的 Vim 保持兼容。几乎所有功能都支持从右到左模式 (当然,不排除存在某些
缺陷)。
o 单个命令就可更改键盘映射和反向插入模式。
o 单个命令就可切换阿拉伯语的完整支持。
o 在阿拉伯语模式里,数值从左到右输入。当输入非数字字符时,该字符会插在最后输
入数值的左侧。
o 支持在命令行反向插入模式下使用阿拉伯语键盘映射。
o 在支持双向显示 (Bidi) 能力的终端模拟器中启动 Vim 时,支持双向显示功能。
阿拉伯语字体 arabicfonts
Vim 要求使用等宽字体,现在已有很多此类字体可用。而阿拉伯语还要求具备
ISO-8859-6 以及 B-表现型 (Presentation Form-B) 的字体 (如果没有 B-型,阿拉伯语
支持 不可 用)。强烈推荐用户寻找所谓的 'ISO-10646-1' 字体。可在互联网上查找,
或者访问 www.arabeyes.org 以获取有关从何处获取所需阿拉伯语字体的更多信息。
字体安装
o 在 X Window 系统下安装字体 (Unix/Linux)
根据具体系统,将 阿拉伯 字体文件复制到用户选择的任一目录下。切换到该目录,
然后执行如下命令:
% mkfontdir
% xset +fp 阿拉伯_字体_目录_路径_名
使用方法
在 Vim 实际使用阿拉伯语之前,要考虑到并完成一些设置。
o 设置阿拉伯字体
+ 对于 Vim GUI,将 'guifont' 设为用户的 阿拉伯 字体。可通过在 Vim 窗口中输
入以下命令完成。
:set guifont=用户的_阿拉伯_字体
注意: 字符串 '用户的 阿拉伯 字体' 请用 linux/unix 系统下完整的字体名替换
(如 -misc-fixed-medium-r-normal--20-200-75-75-c-100-iso10646-1)。
也可在 .vimrc 文件里添加以上的 'guifont' 设置命令以得到相同效果。也就是
在 .vimrc 文件里加上 ':set guifont=用户的 阿拉伯 字体'。
+ 在 X Window 环境下,也可在启动 Vim 时加上 '-fn 用户的 阿拉伯 字体' 选
项完成。
o 设置合适字符编码
要打开正确的阿拉伯语设置,可用以下命令:
:set encoding=utf-8
将它加到 .vimrc 文件里 (最好不要在 Vim 窗口的命令行里手工输入)。简单地说,
在 vimrc 文件里加上 ':set encoding=utf-8'。
不使用 UTF-8 时,试图使用阿拉伯语会得到以下警告消息,
W17
Arabic 需要 UTF-8,请执行 ':set encoding=utf-8'
o 启动阿拉伯语的设置 [快捷方式]
为了简化操作并实现流水线化处理,有两种方案: 其一是以下列方式启动 Vim:
% vim -A 用户的_utf8_阿拉伯_文件 ...
其二是在 Vim 里执行如下命令:
:set arabic
建议用户采取以上两种方式之一。未打开 'termbidi' 设置时,两者都会实际完成:
1. 设置相应的键盘映射
2. 允许删除单个组合字符对
3. 打开 rightleft 模式 (从右到左)
4. 打开 rightleftcmd 模式 (影响命令行)
5. 打开 arabicshape 模式 (字型重整)
也可在 .vimrc 文件里加上 ':set arabic'。
要关闭阿拉伯语支持:
:set noarabic
会撤销上述启动命令所做的一切操作,但不修改全局设置,否则会影响到其他打开的
缓冲区。简单地说,'noarabic' 命令会:
1. 切换到原有的键盘映射
2. 禁止删除单个组合字符对
3. 关闭 rightleft 模式
注意: 'arabic' 命令会考虑到 'termbidi' 设置,以检测终端是否提供外部的双向显
示 (bidi) 支持 ("mlterm" 就是一例),'termbidi' (如果可用) 比从右到左
更优越,提供的功能更多,所以优先使用该支持。此时,'arabic' 设置只会设
置键盘映射而保持其他设置不变。
'termbidi' 打开时,为了分离竖向窗口,可用指示从左到右方向的垂直分割符
"l" 或 "𝖨"。通过修改其颜色为前景色,可隐藏此分割符:
:set fillchars=vert:l
:hi VertSplit ctermbg=White
注意 这只是临时方案,并非最终方案。
从另一方面说,如果更喜欢详细而明确的逐步操作,也未必非要使用 'arabic' 这种
快捷方式命令,以下是所需步骤 (换而言之,使用 ':set arabic' 时,以下内容可以
跳过不看) -
+ 激活阿拉伯语的键盘映射
要激活阿拉伯语的键盘映射 (也就是,将英语/拉丁语系键盘重新映射到相当于标
准阿拉伯语的键盘),可将 'keymap' 选项设置成 "arabic"。为此,在 Vim 窗口
中输入
:set keymap=arabic
也可在 .vimrc 文件里添加以上的 'keymap' 设置命令以得到相同效果。也就是
在 .vimrc 文件里加上 ':set keymap=arabic'。
要在缺省映射 (英语) 和阿拉伯语的键盘映射间切换,建议在插入 (包括添加/替
换) 模式下键入 'CTRL-^'。此时,在命令行上显示的插入模式提示会显示
"Arabic" 字符串,指示当前映射使用的键盘映射 (如,-- INSERT Arabic --)。
+ 阿拉伯语的的删除组合字符对能力
Vim 缺省关闭 'delcombine' 选项。该选项允许删除 LAM_ALEF (LAA) (لَا / لا)
组合字符里的 ALEF (ا) 而保留 LAM (ل) (也就是说,将组合字符还原为原有两个
字符的形式 -- 这也适用于 harakat (元音符号) 及其组合字符形式)。要在 Vim
窗口里打开该选项
:set delcombine
也可在 .vimrc 文件里添加以上的 'delcombine' 设置命令以得到相同效果。也就
是在 .vimrc 文件里加上 ':set delcombine'。
+ 阿拉伯语的从右到左模式
Vim 缺省以从左到右模式启动。'rightleft' 是改变窗口文本方向的命令 - 可用
以下方式之一设置,
- 用 `:set rightleft` 和 `:set norightleft` 在从左到右和从右到左模式间切
换。
- 可简化为 `:set rl` ('rl' 是 rightleft 的缩写)。
- 在 .vimrc 文件里添加 `:set rl`,即可始终以从右到左模式启动 Vim。
+ 阿拉伯语的从右到左命令行模式
有些命令可以在从右到左的模式下完成编辑。目前,仅适用于搜索命令。
这由 'rightleftcmd' 选项控制。缺省值为 "search",也就是说,'rightleft'
打开的窗口里会以从右到左的模式编辑搜索命令。要关闭该行为,
:set rightleftcmd=
要重新打开搜索命令编辑的从右到左模式,
:set rightleftcmd&
+ 阿拉伯语的字型重整模式
要激活阿拉伯语所需的字型替换 (重整、组合,合并),可打开 'arabicshape' 命
令。可在 Vim 窗口里设置
:set arabicshape
也可在 .vimrc 文件里添加以上的 'arabicshape' 设置命令以得到相同效果。也
就是在 .vimrc 文件里加上 ':set arabicshape'。
键盘映射/键盘 arabickeymap
Vim 使用标准的 UTF-8 字符/字母编码。强烈不建议使用或甚至尝试任何其他编码形式。
注意: UTF-8 是一个包罗万象的编码,因此也是阿拉伯语唯一支持 (以及鼓励使用) 的编
码 (应当不提倡甚至反对使用任何其他专用编码)。
o 键盘
+ 插入/替换模式下,CTRL-^ 会切换阿拉伯语/拉丁语系模式。
+ 键盘映射基于 Microsoft 的键盘映射表 (阿拉伯世界的实际标准):
+---------------------------------------------------------------------+
|! |@ |# |$ |% |^ |& |* |( |) |_ |+ || |~ ّ |
|1 ١ |2 ٢ |3 ٣ |4 ٤ |5 ٥ |6 ٦ |7 ٧ |8 ٨ |9 ٩ |0 ٠ |- |= |\ |` ذ |
+---------------------------------------------------------------------+
|Q َ |W ً |E ُ |R ٌ |T لإ |Y إ |U ` |I ÷ |O x |P ؛ |{ < |} > |
|q ض |w ص |e ث |r ق |t ف |y غ |u ع |i ه |o خ |p ح |[ ج |] د |
+-----------------------------------------------------------+
|A ِ |S ٍ |D [ |F ] |G لأ |H أ |J ـ |K ، |L / |: |" |
|a ش |s س |d ي |f ب |g ل |h ا |j ت |k ن |l م |; ك |' ط |
+------------------------------------------------------+
|Z ~ |X ْ |C { |V } |B لآ |N آ |M ' |< , |> . |? ؟ |
|z ئ |x ء |c ؤ |v ر |b لا |n ى |m ة |, و |. ز |/ ظ |
+-------------------------------------------------+
局限
o Vim 的 GUI 版本目前不支持双向显示 (也即在一行里能同时看到阿拉伯语和拉丁语系
的混合文字)。
已知漏洞
有一个已知的小漏洞:
1. 如果在 LAM (ل) (U+0644) 后插入 haraka (如 Fatha ( َ) (U+064E)),然后再插入
ALEF (ا) (U+0627),期望的组合不会发生,因为夹在中间的 haraka 生成了 无法
正确显示的内容。
临时解决方法: 不要在 LAM 和 ALEF 组合之间插入 harakat。更一般地,harakat
和 LAM+ALEF 字符的组合将无法正确显示 (甚至连其后出现的字符也
可能出现显示问题)。这个问题纯粹是显示上的,保存文件时,会使
用适当的编码保留所有信息,不会造成任何数据丢失。
除此以外,还没有其他已知的漏洞。
vim:tw=78:ts=8:noet:ft=help:norl: