Usr_45

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


VIM 用户手册 - 作者 Bram Moolenaar
选择您的语言(区域设置)
Vim 中的消息可以使用多种语言。本章介绍如何更改使用的语言。此外,还解释了使用不同语言处理文件的不同方法。
45.1 消息语言 45.2 菜单语言 45.3 使用其他编码 45.4 编辑使用不同编码的文件 45.5 输入语言文本
上一章:usr_44.txt 自己的语法高亮 目录:usr_toc.txt

消息语言

启动 Vim 时,它会检查环境以找出您使用的语言。大多数情况下这应该可以正常工作,您将获得您语言的消息(如果可用)。要查看当前语言,请使用以下命令
:language
如果返回“C”,则表示使用默认语言,即英语。
如果想使用其他语言的消息怎么办?有几种方法。您应该使用哪种方法取决于您的系统功能。第一种方法是在启动 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”的手册页应该告诉您在您的系统上找到它的位置。请注意准确输入名称,如应有的那样。大小写很重要,并且“-”和“_”字符很容易混淆。
您还可以分别为消息、编辑文本和时间格式设置语言。参见 :language.

自己动手翻译消息

如果您的语言没有提供翻译后的消息,您可以自己编写。为此,请获取 Vim 的源代码和 GNU gettext 包。解压源代码后,可以在 src/po/README.txt 目录中找到说明。翻译并不难。您不需要是程序员。当然,您必须了解英语和您要翻译的语言。当您对翻译满意时,可以考虑让其他人使用它。将其上传到 https://github.com/vim/vim 或将其发送到 Vim 维护者 [email protected]。或两者都做。

45.2 菜单语言

默认菜单是英文的。要使用您的本地语言,必须对其进行翻译。通常情况下,如果环境设置为您使用的语言,则会自动为您完成此操作,就像消息一样。您无需为此做任何额外的事情。但这只有在提供该语言的翻译时才有效。假设您在德国,语言设置为德语,但更喜欢使用“File”而不是“Datei”。您可以通过以下方式切换回使用英文菜单
:set langmenu=none
也可以指定一种语言
:set langmenu=nl_NL.ISO_8859-1
与上面一样,“-”和“_”之间的区别很重要。但是,此处忽略大小写差异。必须在加载菜单之前设置 'langmenu' 选项。一旦定义了菜单,更改 '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”命令找出您的语言名称。使用此名称,但将所有字母改为小写。然后将文件复制到您自己的运行时目录,该目录在 'runtimepath' 中的开头找到。例如,对于 Unix,您将执行以下操作
:!cp $VIMRUNTIME/lang/menu_ko_kr.euckr.vim ~/.config/nvim/lang/menu_nl_be.iso_8859-1.vim
您将在“$VIMRUNTIME/lang/README.txt”中找到翻译提示。

45.3 使用其他编码

Vim 猜测您要编辑的文件是为您的语言编码的。对于许多欧洲语言,这是“latin1”。然后每个字节是一个字符。这意味着共有 256 个不同的字符。对于亚洲语言来说,这还不够。这些语言大多使用双字节编码,提供超过 10,000 个可能的字符。当文本包含多种语言时,这仍然不够。这就是 Unicode 出现的地方。它旨在包含所有常用语言中使用的字符。这是“替代所有其他编码的超级编码”。但它还没有被广泛使用。幸运的是,Vim 支持这三种类型的编码。而且,在某些限制下,即使您的环境使用与文本不同的语言,您也可以使用它们。但是,当您只编辑使用您语言编码的文件时,默认设置应该可以正常工作,您无需执行任何操作。以下内容仅在您想编辑不同的语言时才相关。

在 GUI 中使用 UNICODE

Unicode 的好处是其他编码可以转换为它并转换回来,而不会丢失信息。当您让 Vim 在内部使用 Unicode 时,您将能够编辑任何编码的文件。不幸的是,支持 Unicode 的系统数量仍然有限。因此,您的语言不太可能使用它。您需要告诉 Vim 您想使用 Unicode,以及如何处理与系统其他部分的接口。让我们从能够显示 Unicode 字符的 Vim 的 GUI 版本开始。这应该可以工作
: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 窗口系统。此字体位于一个用于增强 xterm 的 Unicode 支持的软件包中。
对于 MS-Windows,一些字体只包含有限数量的 Unicode 字符。尝试使用“Courier New”字体。您可以使用“编辑/选择字体...”菜单选择并尝试可用的字体。但只能使用等宽字体。例子
:set guifont=courier_new:h12
如果效果不佳,请尝试获取字体包。
现在您已经告诉 Vim 在内部使用 Unicode 并使用 Unicode 字体显示文本。
在 UNICODE 终端中使用 UNICODE
有一些终端直接支持 Unicode。与 XFree86 捆绑在一起的标准 xterm 就是其中之一。让我们以它为例。首先,xterm 必须使用 Unicode 支持进行编译。使用“-u8”参数启动 xterm。您可能还需要指定字体。例子
xterm -u8 -fn -misc-fixed-medium-r-normal--18-120-100-100-c-90-iso10646-1
现在您可以在此终端内运行 Vim。

在普通终端中使用 UNICODE

假设您想使用 Unicode 文件,但没有支持 Unicode 的终端。您可以使用 Vim 执行此操作,尽管终端不支持的字符不会显示。文本的布局将保留。
尝试编辑包含 Unicode 字符的文件。您会注意到 Vim 会在应该显示字符但终端无法显示的位置放置问号(或下划线或其他字符)。将光标移动到问号处并使用以下命令
ga
Vim 会显示一行包含字符代码的行。这将为您提供有关它是哪个字符的提示。您可以在 Unicode 表中查找它。实际上,您可以这样查看文件,如果您有足够的时间。
注意:由于 'encoding' 用于 Vim 中的所有文本,因此更改它会导致所有非 ASCII 文本无效。在使用寄存器和 shada-file 时,您会注意到这一点(例如,记住的搜索模式)。建议在您的 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 文件必须以字节顺序标记 (BOM) 开头。这允许检测 16 位、32 位和 utf-8 Unicode 编码。 utf-8 utf-8 Unicode。当字节序列在 utf-8 中非法时,这将被拒绝。 latin1 传统的 8 位编码。始终有效。
当您开始编辑该 16 位 Unicode 文件,并且它包含 BOM 时,Vim 会检测到这一点,并在读取文件时将其转换为 utf-8。该 'fileencoding' 选项(末尾没有 s)设置为检测到的值。在这种情况下,它是“utf-16le”。这意味着它是 Unicode、16 位和小端。此文件格式在 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 有十万多个字符。那么如何输入这些字符呢?首先,如果您不需要使用太多特殊字符,可以使用二合字。这已经在 24.9 中进行了说明。如果您使用的语言使用的字符数量远远超过键盘上的按键数量,则需要使用输入法 (IM)。这需要学习从键入的按键到结果字符的转换。如果您需要输入法,您的系统上可能已经存在一个。它应该像在其他程序中一样与 Vim 协同工作。

键映射

对于某些语言,字符集不同于拉丁字母,但使用的字符数量相似。可以将按键映射到字符。Vim 使用键映射来实现这一点。假设您要输入希伯来语。您可以像这样加载键映射
:set keymap=hebrew
Vim 将尝试为您找到键映射文件。这取决于 'encoding' 的值。如果没有找到匹配的文件,您将收到错误消息。
现在您可以在插入模式下输入希伯来语。在普通模式和键入 ":" 命令时,Vim 会自动切换到英语。您可以使用以下命令在希伯来语和英语之间切换
CTRL-^
这仅在插入模式和命令行模式下有效。在普通模式下,它会执行完全不同的操作(跳转到备用文件)。如果您设置了 'showmode' 选项,则模式消息中会显示键映射的使用方式。在 GUI Vim 中,键映射的使用方式将以不同的光标颜色显示。您还可以使用 'iminsert''imsearch' 选项更改键映射的使用方式。
要查看映射列表,请使用以下命令
:lmap
要了解哪些键映射文件可用,在 GUI 中,您可以使用“编辑/键映射”菜单。否则,您可以使用以下命令
:echo globpath(&rtp, "keymap/*.vim")

自己动手键映射

您可以创建自己的键映射文件。这并不难。从与您要使用的语言类似的键映射文件开始。将其复制到运行时目录中的“keymap”目录。例如,对于 Unix,您将使用目录“~/.config/nvim/keymap”。键映射文件的文件名必须像这样
keymap/{name}.vim
或者
keymap/{name}_{encoding}.vim
{name} 是键映射的名称。选择一个明显的名称,但与现有的键映射不同(除非您要替换现有的键映射文件)。{name} 不能包含下划线。可选地,在添加下划线后添加使用的编码。例如
keymap/hebrew.vim
keymap/hebrew_utf-8.vim
文件的内容应该是不言自明的。查看与 Vim 一起分发的几个键映射。有关详细信息,请参阅 mbyte-keymap

最后手段

如果所有其他方法都失败,您可以使用 CTRL-V 输入任何字符
编码类型范围
8 位 CTRL-V 123 十进制 0-255 8 位 CTRL-V x a1 十六进制 00-ff 16 位 CTRL-V u 013b 十六进制 0000-ffff 31 位 CTRL-V U 001303a4 十六进制 00000000-7fffffff
不要键入空格。有关详细信息,请参阅 i_CTRL-V_digit
版权:请参阅 manual-copyright vim:tw=78:ts=8:noet:ft=help:norl
命令索引
快速参考