Mbyte

Nvim :help 页面,生成 使用 tree-sitter-vimdoc 解析器。


多字节支持 多字节 中文 日语 韩语 这与编辑使用一个字节(一个八位字节)无法表示的许多字符的语言有关。例如,中文、日语和韩语。Unicode 也涵盖在此。
有关最常见功能的介绍,请参阅用户手册中的 usr_45.txt。有关更改消息和菜单语言,请参阅 mlang.txt
这是 Vim 中多字节功能的摘要。如果您幸运的话,它按描述的方式工作,您可以轻松地开始使用 Vim。如果某些功能无法正常工作,则需要阅读其余内容。如果需要大量的工作和实验才能使 Vim 使用所有多字节功能,请不要感到惊讶。不幸的是,每个系统都有自己的处理多字节语言的方式,并且非常复杂。

LOCALE

首先,您必须确保当前的区域设置设置正确。如果您的系统已安装为使用该语言,它可能立即起作用。如果不是,您可以通过在 shell 中设置 $LANG 环境变量来使其工作
setenv LANG ja_JP.EUC
不幸的是,区域设置的名称取决于您的系统。日语也可能被称为 "ja_JP.EUCjp" 或仅仅 "ja"。要查看当前使用的内容
:language
要在 Vim 内部更改区域设置,请使用
:language ja_JP.EUC
如果这不起作用,Vim 将显示错误消息。这是一种很好的实验方法,可以找到您要使用的区域设置名称。但是,最好在 shell 中设置区域设置,以便从一开始就使用它。
有关详细信息,请参阅 mbyte-locale

编码

Nvim 内部始终使用 UTF-8。因此 'encoding' 选项始终设置为 "utf-8" 且无法更改。
Vim 内部使用的所有文本都将使用 UTF-8 编码。不仅缓冲区中的文本,还包括寄存器、变量等。
您可以编辑与 UTF-8 不同的编码的文件。Nvim 会在您读取文件时将其转换为 UTF-8,并在您写入文件时将其转换回原始编码。请参阅 'fileencoding''fileencodings'++enc

显示和字体

如果您在终端(仿真器)中工作,您必须确保它接受 UTF-8,这是 Vim 工作的编码。否则,只有 ASCII 字符可以正确显示和编辑。
对于 GUI,您必须选择支持 UTF-8 的字体。您可以设置 'guifont''guifontwide''guifont' 用于单宽字符,'guifontwide' 用于双宽字符。因此,'guifontwide' 字体必须是 'guifont' 宽度的一倍。UTF-8 示例
:set guifont=-misc-fixed-medium-r-normal-*-18-120-100-100-c-90-iso10646-1
:set guifontwide=-misc-fixed-medium-r-normal-*-18-120-100-100-c-180-iso10646-1
您也可以只设置 'guifont',Nvim GUI 会尝试为您找到匹配的 'guifontwide'

输入

有多种方法可以输入多字节字符
可以使用系统 IME。
可以使用键映射。请参阅 mbyte-keymap
选项 'iminsert''imsearch''imcmdline' 可用于选择不同的输入方法或临时禁用它们。

区域设置 mbyte-locale

最简单的设置是您的整个系统都使用您要使用的区域设置。但是,也可以为正在使用的 shell 设置区域设置,或仅在 Vim 内部使用特定的区域设置。
什么是区域设置? locale
世界上有许多语言。而且,文化和环境至少与语言的数量一样多。与区域相对应的语言环境称为 "区域设置"。这包括有关所用语言、字符集、排序的排序顺序、日期格式、货币格式等的的信息。对于 Vim,只有语言和字符集真正重要。
只有在您的系统支持的情况下,您才能使用区域设置。某些系统只有少数区域设置,尤其是在美国。您要使用的语言可能不在您的系统上。在这种情况下,您可能能够将其作为额外的包安装。查看您的系统文档了解如何操作。
安装区域设置的位置因系统而异。例如,"/usr/share/locale" 或 "/usr/lib/locale"。请参阅您的系统的 setlocale() 手册页。
查看这些目录将显示每个区域设置的确切名称。大多数情况下,大小写很重要,因此 "ja_JP.EUC" 和 "ja_jp.euc" 是不同的。某些系统具有 locale.alias 文件,它允许将 "nl" 等简短名称转换为 "nl_NL.ISO_8859-1" 等完整名称。
请注意,X-windows 具有自己的区域设置。而且不幸的是,它使用的区域设置名称与其他地方使用的不同。这很令人困惑!对于 Vim,setlocale() 函数使用什么很重要,这通常不是 X-windows 使用的。您可能需要进行一些实验才能找出真正起作用的方法。
locale-name
的(简化)格式 locale 名称是
language 或 language_territory 或 language_territory.codeset
Territory 表示国家(或其一部分),codeset 表示 charset。例如,区域设置名称 "ja_JP.eucJP" 表示:ja 语言为日语 JP 国家为日本 eucJP 字符集为 EUC-JP 但它也可能是 "ja"、"ja_JP.EUC"、"ja_JP.ujis" 等。而且不幸的是,特定语言、地区和字符集的区域设置名称并不统一,并且取决于您的系统。
区域设置名称示例
charset 语言 区域设置名称
GB2312 中文(简体) zh_CN.EUC, zh_CN.GB2312 Big5 中文(繁体) zh_TW.BIG5, zh_TW.Big5 CNS-11643 中文(繁体) zh_TW EUC-JP 日语 ja, ja_JP.EUC, ja_JP.ujis, ja_JP.eucJP Shift_JIS 日语 ja_JP.SJIS, ja_JP.Shift_JIS EUC-KR 韩语 ko, ko_KR.EUC
使用区域设置
要开始为整个系统使用区域设置,请参阅您的系统的文档。您通常需要在 "/etc" 中的配置文件中进行设置。
要在 shell 中使用区域设置,请设置 $LANG 环境变量。当您要使用韩语并且 locale 名称是 "ko" 时,请执行以下操作
sh: export LANG=ko csh: setenv LANG ko
您可以将其放在您的 ~/.profile 或 ~/.cshrc 文件中,以始终使用它。
要在 Vim 中使用区域设置,请使用 :language 命令
:language ko
将其放在您的 init.vim 文件中,以便始终使用它。
或者在启动 Vim 时指定 $LANG
sh: LANG=ko vim {vim-arguments} csh: env LANG=ko vim {vim-arguments}
您可以为此创建一个小型 shell 脚本。
在 Nvim 中,UTF-8 始终用于内部编码字符。这适用于使用文本的所有地方,包括缓冲区(加载到内存中的文件)、寄存器和变量。
charset codeset 字符集是编码的另一个名称。存在细微的差别,但在使用 Vim 时这些差别并不重要。 "codeset" 是另一个类似的名称。
每个字符都编码为一个或多个字节。当所有字符都使用一个字节编码时,我们将其称为单字节编码。最常用的编码称为 "latin1"。这将字符数量限制为 256 个。其中一些是控制字符,因此只有更少的字符可用于文本。
当某些字符使用两个或多个字节时,我们将其称为多字节编码。这允许使用超过 256 个字符,这是大多数东亚语言所必需的。
大多数多字节编码对前 127 个字符使用一个字节。这些与 ASCII 相同,这使得交换纯 ASCII 文本变得容易,无论使用哪种语言。因此,即使设置了错误的编码,您也可能会看到正确的文本。
encoding-names
Vim 可以编辑不同字符编码的文件。主要有三个组
1 8 位单字节编码,256 个不同的字符。主要用于美国和欧洲。例如:ISO-8859-1(Latin1)。所有字符只占用一个屏幕单元。
2 2 字节双字节编码,超过 10000 个不同的字符。主要用于亚洲国家。例如:euc-kr(韩语)屏幕单元的数量等于字节的数量(除了 euc-jp,当第一个字节为 0x8e 时)。
u Unicode 通用编码,可以替换所有其他编码。ISO 10646。数百万个不同的字符。例如:UTF-8。字节和屏幕单元之间的关系很复杂。
Vim 内部只使用 UTF-8。但是,可以使用转换编辑其他编码的文件,请参阅 'fileencoding'
识别的 'fileencoding' 值包括:encoding-values
1 latin1 8 位字符(ISO 8859-1,也用于 cp1252) 1 iso-8859-n ISO_8859 变体(n = 2 到 15) 1 koi8-r 俄语 1 koi8-u 乌克兰语 1 macroman MacRoman(Macintosh 编码) 1 8bit-{name} 任何 8 位编码(Vim 特定名称) 1 cp437 与 iso-8859-1 类似 1 cp737 与 iso-8859-7 类似 1 cp775 波罗的海 1 cp850 与 iso-8859-4 类似 1 cp852 与 iso-8859-1 类似 1 cp855 与 iso-8859-2 类似 1 cp857 与 iso-8859-5 类似 1 cp860 与 iso-8859-9 类似 1 cp861 与 iso-8859-1 类似 1 cp862 与 iso-8859-1 类似 1 cp863 与 iso-8859-8 类似 1 cp865 与 iso-8859-1 类似 1 cp866 与 iso-8859-5 类似 1 cp869 与 iso-8859-7 类似 1 cp874 泰语 1 cp1250 捷克语、波兰语等 1 cp1251 西里尔字母 1 cp1253 希腊语 1 cp1254 土耳其语 1 cp1255 希伯来语 1 cp1256 阿拉伯语 1 cp1257 波罗的海 1 cp1258 越南语 1 cp{number} MS-Windows:任何已安装的单字节代码页 2 cp932 日语(仅限 Windows) 2 euc-jp 日语 2 sjis 日语 2 cp949 韩语 2 euc-kr 韩语 2 cp936 简体中文(仅限 Windows) 2 euc-cn 简体中文 2 cp950 繁体中文(big5 的别名) 2 big5 繁体中文(cp950 的别名) 2 euc-tw 繁体中文 2 2byte-{name} 任何双字节编码(Vim 特定名称) 2 cp{number} MS-Windows:任何已安装的双字节代码页 u utf-8 32 位 UTF-8 编码的 Unicode(ISO/IEC 10646-1) u ucs-2 16 位 UCS-2 编码的 Unicode(ISO/IEC 10646-1) u ucs-2le 与 ucs-2 相似,小端序 u utf-16 ucs-2 扩展为双字以容纳更多字符 u utf-16le 与 utf-16 相似,小端序 u ucs-4 32 位 UCS-4 编码的 Unicode(ISO/IEC 10646-1) u ucs-4le 与 ucs-4 相似,小端序
{name} 可以是您的系统支持的任何编码名称。它传递给 iconv() 以在 UTF-8 和文件的编码之间进行转换。对于 MS-Windows,"cp{number}" 表示使用代码页 {number}。例子
:set fileencoding=8bit-cp1252
:set fileencoding=2byte-cp932
MS-Windows 代码页 1252 与 latin1 非常相似。出于实际原因,使用相同的编码,并将其称为 latin1。'isprint' 可用于显示或不显示字符 0x80 - 0xA0。
可以使用多个别名,它们将转换为上述名称之一。不完整的列表
1 ansi 与 latin1 相同(已过时,为了向后兼容) 2 japan 日语:"euc-jp" 2 korea 韩语:"euc-kr" 2 prc 简体中文:"euc-cn" 2 chinese 与 "prc" 相同 2 taiwan 繁体中文:"euc-tw" u utf8 与 utf-8 相同 u unicode 与 ucs-2 相同 u ucs2be 与 ucs-2 相同(大端序) u ucs-2be 与 ucs-2 相同(大端序) u ucs-4be 与 ucs-4 相同(大端序) u utf-32 与 ucs-4 相同 u utf-32le 与 ucs-4le 相同 default 当前区域设置的编码。
对于 UCS 代码,字节顺序很重要。这很棘手,只要有可能就使用 UTF-8。默认情况下使用大端序(最高有效字节排在最前面)
name 字节 char
ucs-2 11 22 1122 ucs-2le 22 11 1122 ucs-4 11 22 33 44 11223344 ucs-4le 44 33 22 11 11223344
在 MS-Windows 系统上,你经常想使用 “ucs-2le”,因为它使用小端序 UCS-2。
有一些编码很相似,但并不完全相同。Vim 会将它们视为不同的编码,以便在需要时进行转换。你可能想使用类似的名称来避免转换,或者在转换不可行的时候。
cp932, shift-jis, sjis cp936, euc-cn
Vim 会在多个地方自动地在编码之间进行转换
当读取文件并且 'fileencoding' 与 “utf-8” 不同时
当写入文件并且 'fileencoding' 与 “utf-8” 不同时
当显示消息并且用于 LC_MESSAGES 的编码与 “utf-8” 不同时(需要支持此功能的 gettext 版本)。
当读取 Vim 脚本并且 :scriptencoding 与 “utf-8” 不同时。其中大部分需要 iconv。用于读取和写入文件的转换也可以通过 'charconvert' 选项指定。
用于转换字符集的有用工具:所有:iconv GNU iconv 可以转换大多数编码。Unicode 被用作中间编码,它允许从所有其他编码转换到所有其他编码。参见 https://directory.fsf.org/wiki/Libiconv.
mbyte-conversion
当以与 “utf-8” 不同的编码读取和写入文件时,需要进行转换。支持以下转换
所有在 Latin-1(ISO-8859-1)、UTF-8、UCS-2 和 UCS-4 之间的转换都在内部处理。
对于 MS-Windows,从任何代码页到任何代码页的转换应该都能正常工作。
使用 'charconvert' 指定的转换
使用 iconv 库进行转换,如果可用。旧版本的 GNU iconv() 可能导致转换失败(它们请求一个非常大的缓冲区,大于 Vim 愿意提供的)。尝试获取另一个 iconv() 实现。

使用键盘映射输入 mbyte-keymap

当键盘无法产生你想要在文本中输入的字符时,可以使用 'keymap' 选项。这会将一个或多个(英文)字符转换为另一个(非英文)字符。这只会发生在键入文本时,而不是键入 Vim 命令时。这样可以避免在两种键盘设置之间切换。
'keymap' 选项的值指定要使用的键盘映射文件。此文件名的格式为以下两种之一
keymap/{keymap}_utf-8.vim keymap/{keymap}.vim
这里 {keymap}'keymap' 选项的值。包含 “utf-8” 的文件名会先尝试。
'runtimepath' 用于查找这些文件。要查看所有可用键盘映射文件的概述,可以使用以下命令
:echo globpath(&rtp, "keymap/*.vim")
在插入和命令行模式下,可以使用 CTRL-^ 在使用和不使用键盘映射之间切换。 i_CTRL-^ c_CTRL-^ 此标志会通过 'iminsert' 选项为插入模式记住。当退出和进入插入模式时,会使用先前值。对于接收单个字符参数的命令(例如 fr),也会使用相同的值。对于命令行模式,该标志不会被记住。你应该先键入一个 Ex 命令,该命令是 ASCII。对于键入搜索模式,使用 'imsearch' 选项。可以将其设置为使用与 'iminsert' 相同的值。 lCursor
可以在使用语言映射时为 GUI 光标指定不同的颜色。默认情况下,此功能处于禁用状态,以避免在使用非标准背景色时光标变得不可见。以下是一个使用亮色光标的示例
:highlight Cursor guifg=NONE guibg=Green
:highlight lCursor guifg=NONE guibg=Cyan
keymap-file-format :loadk :loadkeymap E105 E791 键盘映射文件看起来像这样
" Maintainer:        name <email@address>
" Last Changed:        2001 Jan 1
let b:keymap_name = "short"
loadkeymap
a        A
b        B        comment
以 “” 开头的行是注释,将被忽略。空行也会被忽略。包含映射的行在有用文本之后可能有一个注释。
“b:keymap_name” 可以设置为简短的名称,该名称将在状态行中显示。这样做的目的是,与 'keymap' 的值相比,它占据的空间更少,而 'keymap' 的值可能很长,以便区分不同的语言、键盘和编码。
实际的映射位于 “loadkeymap” 之后的行中。在示例中,“a” 被映射到 “A”,而 “b” 被映射到 “B”。因此,第一个项目被映射到第二个项目。对于每一行都会执行此操作,直到文件末尾。这些项目与可以在 :lmap 命令中使用的项目完全相同,使用 “<buffer>” 将映射限制在缓冲区中。可以使用以下命令检查结果
:lmap
两个项目之间必须用空格分隔。你不能在项目中包含空格,请改用特殊名称 “<Tab>” 和 “<Space>”。两个项目的总长度不能超过 200 字节。
第一列中可以包含多个字符。这就像一个死键。例如
'a        á
由于 Vim 不知道引号后的下一个字符是否真的是 “a”,因此它会等待下一个字符。为了能够插入单个引号,请添加以下行
''        '
由于映射是使用 :lmap 定义的,因此生成的引号不会用于 'keymap' 中定义的另一个字符的开头。它可以在标准的 :imap 映射中使用。“accents” 键盘映射使用了这一点。 keymap-accents
第一列也可以使用 <> 形式:<C-c> Ctrl-C <A-c> Alt-c <A-C> Alt-C 请注意,Alt 映射可能无法正常工作,具体取决于你的键盘和终端。
虽然第二列中可以包含多个字符,但这并不常见。但是,你可以使用多种方法来指定字符
A        a                literal character
A        <char-97>        decimal value
A        <char-0x61>        hexadecimal value
A        <char-0141>        octal value
x        <Space>                special key name
这些字符被假定为以 UTF-8 编码。当所有字符都以字面形式给出时,可以使用 “:scriptencoding”。当使用 <char-> 结构时,这将不起作用,因为转换是在键盘映射文件上进行的,而不是在结果字符上进行的。
“loadkeymap” 之后的行使用 'cpoptions' 设置为 “C” 进行解释。这意味着不会使用延续行,并且反斜杠在映射中具有特殊含义。例如
" a comment line
\"        x        maps " to x
\\        y        maps \ to y
如果你编写了一个对其他人有用的键盘映射文件,请考虑将其提交给 Vim 维护者,以便将其包含在发行版中:<[email protected]>

希伯来语键盘映射 keymap-hebrew

此文件解释了在 UTF-8 和 CP1255 编码中可以使用哪些字符,以及如何使用键盘映射获取这些字符
字形编码键盘映射
Char UTF-8 cp1255 hebrew hebrewp name
א 0x5d0 0xe0 t a ´alef ב 0x5d1 0xe1 c b bet ג 0x5d2 0xe2 d g gimel ד 0x5d3 0xe3 s d dalet ה 0x5d4 0xe4 v h he ו 0x5d5 0xe5 u v vav ז 0x5d6 0xe6 z z zayin ח 0x5d7 0xe7 j j het ט 0x5d8 0xe8 y T tet י 0x5d9 0xe9 h y yod ך 0x5da 0xea l K kaf sofit כ 0x5db 0xeb f k kaf ל 0x5dc 0xec k l lamed ם 0x5dd 0xed o M mem sofit מ 0x5de 0xee n m mem ן 0x5df 0xef i N nun sofit נ 0x5e0 0xf0 b n nun ס 0x5e1 0xf1 x s samech ע 0x5e2 0xf2 g uayin ף 0x5e3 0xf3 ; P pe sofit פ 0x5e4 0xf4 p p pe ץ 0x5e5 0xf5 . X tsadi sofit צ 0x5e6 0xf6 m x tsadi ק 0x5e7 0xf7 e q qof ר 0x5e8 0xf8 r r resh ש 0x5e9 0xf9 a w shin ת 0x5ea 0xfa , t tav
元音符号和特殊标点符号:הְ 0x5b0 0xc0 A: A: sheva הֱ 0x5b1 0xc1 HE HE hataf segol הֲ 0x5b2 0xc2 HA HA hataf patah הֳ 0x5b3 0xc3 HO HO hataf qamats הִ 0x5b4 0xc4 I I hiriq הֵ 0x5b5 0xc5 AY AY tsere הֶ 0x5b6 0xc6 E E segol הַ 0x5b7 0xc7 AA AA patah הָ 0x5b8 0xc8 AO AO qamats הֹ 0x5b9 0xc9 O O holam הֻ 0x5bb 0xcb U U qubuts כּ 0x5bc 0xcc D D dagesh הֽ 0x5bd 0xcd ]T ]T meteg ה־ 0x5be 0xce ]Q ]Q maqaf בֿ 0x5bf 0xcf ]R ]R rafe ב׀ 0x5c0 0xd0 ]p ]p paseq שׁ 0x5c1 0xd1 SR SR shin-dot שׂ 0x5c2 0xd2 SL SL sin-dot ׃ 0x5c3 0xd3 ]P ]P sof-pasuq װ 0x5f0 0xd4 VV VV double-vav ױ 0x5f1 0xd5 VY VY vav-yod ײ 0x5f2 0xd6 YY YY yod-yod
以下字符仅在 UTF-8 中可用
Cantillation 符号:glyph Char UTF-8 hebrew name ב֑ 0x591 C: etnahta ב֒ 0x592 Cs segol ב֓ 0x593 CS shalshelet ב֔ 0x594 Cz zaqef qatan ב֕ 0x595 CZ zaqef gadol ב֖ 0x596 Ct tipeha ב֗ 0x597 Cr revia ב֘ 0x598 Cq zarqa ב֙ 0x599 Cp pashta ב֚ 0x59a C! yetiv ב֛ 0x59b Cv tevir ב֜ 0x59c Cg geresh ב֝ 0x59d C* geresh qadim ב֞ 0x59e CG gershayim ב֟ 0x59f CP qarnei-parah ב֪ 0x5aa Cy yerach-ben-yomo ב֫ 0x5ab Co ole ב֬ 0x5ac Ci iluy ב֭ 0x5ad Cd dehi ב֮ 0x5ae Cn zinor ב֯ 0x5af CC masora circle
组合形式:ﬠ 0xfb20 X` Alternativeayin ﬡ 0xfb21 X' Alternative ´alef ﬢ 0xfb22 X-d Alternative dalet ﬣ 0xfb23 X-h Alternative he ﬤ 0xfb24 X-k Alternative kaf ﬥ 0xfb25 X-l Alternative lamed ﬦ 0xfb26 X-m Alternative mem-sofit ﬧ 0xfb27 X-r Alternative resh ﬨ 0xfb28 X-t Alternative tav ﬩ 0xfb29 X-+ Alternative plus שׁ 0xfb2a XW shin+shin-dot שׂ 0xfb2b Xw shin+sin-dot שּׁ 0xfb2c X..W shin+shin-dot+dagesh שּׂ 0xfb2d X..w shin+sin-dot+dagesh אַ 0xfb2e XA alef+patah אָ 0xfb2f XO alef+qamats אּ 0xfb30 XI alef+hiriq (mapiq) בּ 0xfb31 X.b bet+dagesh גּ 0xfb32 X.g gimel+dagesh דּ 0xfb33 X.d dalet+dagesh הּ 0xfb34 X.h he+dagesh וּ 0xfb35 Xu vav+dagesh זּ 0xfb36 X.z zayin+dagesh טּ 0xfb38 X.T tet+dagesh יּ 0xfb39 X.y yud+dagesh ךּ 0xfb3a X.K kaf sofit+dagesh כּ 0xfb3b X.k kaf+dagesh לּ 0xfb3c X.l lamed+dagesh מּ 0xfb3e X.m mem+dagesh נּ 0xfb40 X.n nun+dagesh סּ 0xfb41 X.s samech+dagesh ףּ 0xfb43 X.P pe sofit+dagesh פּ 0xfb44 X.p pe+dagesh צּ 0xfb46 X.x tsadi+dagesh קּ 0xfb47 X.q qof+dagesh רּ 0xfb48 X.r resh+dagesh שּ 0xfb49 X.w shin+dagesh תּ 0xfb4a X.t tav+dagesh וֹ 0xfb4b Xo vav+holam בֿ 0xfb4c XRb bet+rafe כֿ 0xfb4d XRk kaf+rafe פֿ 0xfb4e XRp pe+rafe ﭏ 0xfb4f Xal alef-lamed

使用 UTF-8 mbyte-utf8 UTF-8 utf-8 utf8

Unicode unicode Unicode 字符集旨在包含来自其他字符集的所有字符。因此,可以使用 Unicode(除了少数很少使用的语言)编写任何语言的文本。而且,通常可以将这些语言混合在一个文件中,而这在其他编码中是无法做到的。
Unicode 可以用多种方式编码。最流行的是 UTF-8,它使用一个或多个字节来表示每个字符,并且向后兼容 ASCII。在 MS-Windows 上,也使用 UTF-16(以前称为 UCS-2),它使用 16 位字。
Vim 支持所有这些编码,但内部始终使用 UTF-8。
Vim 具有全面的 UTF-8 支持。它在以下环境中运行良好:
启用了 UTF-8 支持的 xterm
MS-Windows GUI
其他几个平台
支持双宽字符。与 'guifontwide' 一起使用效果最佳。当仅使用 'guifont' 时,宽字符以正常宽度绘制,并在间隙中填充空格。
bom 字节
在读取文件时,可以使用 BOM(字节顺序标记)来识别 Unicode 编码:
UTF-8 是推荐的编码。请注意,很难区分 UTF-16 和 UTF-32。UTF-16 通常在 MS-Windows 上使用,UTF-32 作为文件格式并不广泛。
mbyte-combining mbyte-composing 组合字符用于改变其前一个字符的含义。组合字符绘制在前一个字符的顶部。
Nvim 在很大程度上遵循 Unicode 标准中 UAX#29 对扩展 grapheme 簇的定义,并做了一些修改:ASCII 字符始终从一个新的簇开始。此外,'arabicshape' 启用了一些阿拉伯字母的组合,当它们被塑造成在一个单元格中一起显示时。
太大的组合字符无法显示,但仍然可以使用下面介绍的 g8ga 命令来检查它们。在编辑文本时,组合字符主要被视为前一个字符的一部分。例如,默认情况下,“x”将删除一个字符及其后的组合字符。如果 'delcombine' 选项打开,则按“x”将依次删除组合字符,然后删除基本字符。但在插入时,您需要分别键入第一个字符和后面的组合字符,然后它们将被合并。“r”命令不允许您键入组合字符,因为它不知道下一个字符是否为组合字符。请改用“R”。
不在有效 UTF-8 字节序列中的字节被视为单个字符处理,并显示为<xx>,其中“xx”是字节的十六进制值。
超长序列没有特殊处理,并显示为有效字符。但是,搜索模式可能不会匹配超长序列。(超长序列是指使用比字符所需的字节更多的序列。)NUL(零)是一个例外,它显示为“<00>”。
在文件和缓冲区中,可以使用 Unicode 字符的完整范围(31 位)。但是,显示仅适用于所选字体中存在的字符。
有用的命令
“ga”显示光标下字符的十进制、十六进制和八进制值。如果有组合字符,它们也会显示。(如果消息被截断,请使用“:messages”。)
“g8”显示 UTF-8 字符中使用的字节,以及组合字符,以十六进制数表示。

“:set fileencodings=” 强制对所有文件使用 UTF-8。默认情况下,会自动检测文件的编码。

启动 Vim

您可能希望选择用于菜单的字体。不幸的是,这并不总是有效。请参见下面的系统特定说明,以及 'langmenu'

在 X-Windows 中使用 UTF-8 utf-8-in-xwindows
您需要指定要使用的字体。对于双宽字符,需要另一种字体,其宽度恰好是前者的两倍。有三种方法可以做到这一点:
1. 设置 'guifont' 并让 Vim 查找匹配的 'guifontwide' 2. 设置 'guifont''guifontwide'
:set guifont=-misc-fixed-medium-r-normal--15-140-75-75-c-90-iso10646-1
有关详细信息,请参见每个选项的文档。示例

您可能还想设置用于菜单的字体。这仅适用于 Motif。为此,请使用“:hi Menu font={fontname}”命令。 :highlight

输入 UTF-8 utf-8-typing

如果您使用的是 X-Windows,您应该找到一个支持 UTF-8 的输入法。

如果您的系统不支持输入 UTF-8,您可以使用 'keymap' 功能。这允许您编写一个键映射文件,将 UTF-8 字符定义为 ASCII 字符序列。请参见 mbyte-keymap
如果其他方法都失败,您可以将任何字符键入为四个十六进制字节
CTRL-V u 1234
“1234”被解释为十六进制数。您必须键入四个字符,如果需要,请在前面加上一个零。

命令参数 utf-8-char-arg

fFtr 这样的命令接受一个字符作为参数。对于 UTF-8,此参数可能包含一个或两个组合字符。这些组合字符需要与基本字符一起生成,Vim 不会等待下一个字符被键入来确定它是否是组合字符。使用 'keymap':lmap 是键入这些字符的一种好方法。
在行中搜索字符的命令处理组合字符的方式如下:在搜索不带组合字符的字符时,这将在带或不带组合字符的文本中找到匹配项。在搜索带组合字符的字符时,这将只找到带有该组合字符的匹配项。之所以这样实现,是因为并非每个人都能键入组合字符。

选项概述 mbyte-options

这些选项与编辑多字节文件相关。
'fileencoding' 文件的编码。当它与“utf-8”不同时,在读取或写入文件时会进行转换。
'fileencodings' 文件可能存在的编码列表。在打开文件时,将尝试这些编码,第一个不会导致错误的编码将用于 'fileencoding'
'charconvert' 用于将文件从一种编码转换为另一种编码的表达式。
'formatoptions' 可以包含“m”标志,以便格式化在 256 或更高的多字节字符处换行。这对语言很有用,其中字符序列可以在任何地方断开。
'keymap' 指定键盘映射的名称。
对多字节功能的具体贡献者:
命令索引
快速参考