VIM输入特殊字符
二合字母 digraph digraphs Digraphs
二合字母用来输入不能用普通键盘输入的字符。它们通常是可显示的非 ASCII 字符。二
合字母比用 CTRL-V 输入十进制编码更方便记忆 (见 |i_CTRL-V|)。
用户手册 |24.9| 有二合字母的简短介绍。一个替代方案是用 ‘keymap’ 选项。
- 定义二合字母 |digraphs-define|
- 使用二合字母 |digraphs-use|
- 缺省的二合字母 |digraphs-default|
{Vi 没有这些命令}
- 定义二合字母 digraphs-define
:dig :digraphs
:dig[raphs] 显示当前定义的二合字母。
E104 E39
:dig[raphs] {char1}{char2} {number} …
把二合字母 {char1}{char2} 加入列表。{number} 是字符的
十进制表示形式。例如:
:digr e: 235 a: 228
避免定义 ‘_’ (下划线) 开头的二合字母,将来它会有特殊的
含义。
Vim 通常编译时带有 |+digraphs| 特性。如果没有,":digraph" 命令会显示错误信息。
“:digraphs” 输出的例子:
TH T 222 ss ? 223 a! à 224 a’ á 225 a> a 226 a? ? 227 a: ? 228
每列 (译者注: “TH T 222” 称为一列) 前两个字符是你用来输入二合字母的两个字符。
每列的中间是产生的字符。如果你用不支持二合字母的系统察看或者打印,它们可能是乱
码。
digraph-encoding
通常,十进制表示形式是字符的 Unicode 数值。注意 ‘encoding’ 改变的时候该数值并
不改变。如果需要,字符从 Unicode 转换为 ‘encoding’。这需要该转换确实能实现,有
时并非如此。NUL 字符会显示为 “10”,这是因为 NUL 字符内部用 NL 字符表示。写回文
件时它会还原为 NUL 字符的。
如果 Vim 编译时没有 +multi_byte 特性,你需要指定该字符在 ‘encoding’ 里的编码。
可以这样使用:
if has(“multi_byte”)
digraph oe 339
elseif &encoding == “iso-8859-15”
digraph oe 189
endif
这样,“oe” 二合字母在 Unicode 里使用数值 339,而在 latin9 (iso-8859-15) 里使用
数值 189。
2. 使用二合字母 digraphs-use
有两个方法输入二合字母: i_digraph
CTRL-K {char1} {char2} 或
{char1} {char2}
第一个方法总是可以用的;第二个方法只有在 ‘digraph’ 选项置位的时候才可用。
如果二合字母 {char1}{char2} 不存在,Vim 会搜索二合字母 {char2}{char1}。这样,
即使你不记得何者在前,也能输入。
注意 如果输入 CTRL-K {char1} 时,{char1} 是特殊键,Vim 只会输入该键的编码。这
就不是输入二合字母了。
一旦你输入了二合字母,Vim 把该字符当成占据文件和屏幕的一个正常字符。示例:
‘B’ ‘B’ 会输入中间断开的 ‘|’ 字符 (166)
‘a’ ‘>’ 会输入带 circumflex 重音的 ‘a’ (226)
CTRL-K ‘-’ ‘-’ 会输入软的破折号 (173)
“:digraphs” 列出当前的二合字母。一些缺省的二合字母列在下面的 |digraph-table|
里。
对 CTRL-K 而言,有一个通用的二合字母: CTRL-K {char} 会输入 {char},并
设置最高位。你可以用这个方法来输入带 meta 的字符。
二合字母里不能有 字符。按 的时候,Vim 停止二合字母的输入并回到插入
或命令行模式,这也可以理解为 退出了二合字母的上下文。用 CTRL-V 155 输入
meta-ESC (CSI)。
如果你本来想输入 ‘e’ 但不小心输入了 ‘a’,你也许会键入 ‘a’ ‘e’。但是这个序
列成了二合字母。这也许不是你想要的。要纠正这个错误,你需要再按一次 e。要
避免这