简介

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


Nvim 参考

介绍 简介

Vim 是一个文本编辑器,它包含了 Unix 程序 "Vi" 中的大多数命令以及许多新的命令。
本手册的概述可以在 "help.txt" 文件中找到,help.txt。 它可以通过 Vim 中的 <Help><F1> 键以及 :help 命令访问(只需键入 ":help",不带竖线或引号)。 'helpfile' 选项可以设置为帮助文件的文件名,以防它没有位于默认位置。 你可以用标签跳转到主题:使用 CTRL-] 跳转到光标下的主题,使用 CTRL-T 跳回。
发音
Vim 的发音是一个词,就像 Jim 一样。 因此,Nvim 是 "En-Vim",两个音节。
本手册是所有 Nvim 编辑器和 API 功能的参考。 它不是入门介绍;相反,对于初学者,有一个动手 教程 和一本用户手册 usr_toc.txt
书籍
关于 Vi 和 Vim 的书籍很多。 我们推荐
"Practical Vim" by Drew Neil "Modern Vim" by Drew Neil https://vimcasts.org/publications/
"Practical Vim" 因其专注于快速学习 Vim 的常见编辑任务而广受赞誉。 "Modern Vim" 探索了 Nvim 和 Vim 8 中的新功能。
"Vim - Vi Improved" by Steve Oualline
这是第一本专门介绍 Vim 的书籍。 它的一部分被包含在用户手册中。 frombook ISBN: 0735710015 欲了解更多信息,请尝试以下网站之一: https://iccf-holland.org/click5.html https://www.vim.org/iccf/click5.html

互联网上的 Nvim 互联网

错误 错误报告 在这里报告错误和请求功能: https://github.com/neovim/neovim/issues
请简短但完整。 始终提供可重现的示例,并尝试找出哪些设置或其他因素会触发错误。
如果 Nvim 崩溃,请尝试获取回溯。 请参阅 debug.txt

赞助 Vim/Nvim 开发 注册

修复错误和添加新功能需要大量时间和精力。 为表达您对工作的赞赏并激励开发人员继续致力于 Vim,请捐款。
您捐赠的款项主要用于帮助乌干达的儿童。 请参阅 uganda。 但同时,捐款也增加了开发团队继续致力于 Vim 的动力!
有关赞助的最新信息,请访问 Vim 网站
Nvim 开发与 Vim 的资金来源分开

致谢 致谢

Vim 的大部分代码由 Bram Moolenaar 编写 <[email protected]> Bram-Moolenaar
文档的某些部分来自几个 Vi 手册,作者是:W.N. Joy Alan P.W. Hewett Mark Horton
Vim 编辑器基于 Stevie,并包含(来自)其他软件的思想,这些软件由这里提到的这些人开发。 其他人在向我发送补丁、建议以及提供关于 Vim 的好坏方面的反馈方面提供了帮助。
如果没有这些人的帮助,Vim 永远不会变成它现在的样子!
Ron Aaron Win32 GUI 更改 Mohsin Ahmed 加密 Zoltan Arpadffy VMS 端口工作 Tony Andrews Stevie Gert van Antwerpen DJGPP 在 MS-DOS 上的更改 Berkeley DB(3) 交换文件实现的思想 Keith Bostic Nvi Walter Briscoe Makefile 更新,各种补丁 Ralf Brown SPAWNO 库用于 MS-DOS Robert Colon 许多有用的意见 Marcin Dalecki GTK+ GUI 端口,工具栏图标,gettext() Kayhan Demirel 向我发送了乌干达的新闻 Chris & John Downey xvi (多窗口版本的思想) Henk Elbers 第一个 VMS 端口 Daniel Elstner GTK+ 2 端口 Eric Fischer Mac 端口,'cindent',以及其他改进 Benji Fisher 回答了大量用户问题 Bill Foster Athena GUI 端口(后来被移除)Google 让 Bram 每周工作一天来开发 Vim Loic Grenie xvim (多窗口版本的思想) Sven Guckes Vim 推广者,以前 WWW 页面维护者 Darren Hiebert Exuberant ctags Jason Hildebrand GTK+ 2 端口 Bruce Hunsaker VMS 端口的改进 Andy Kahn Cscope 支持,GTK+ GUI 端口 Oezguer Kesim Vim 邮件列表的维护者 Axel Kielhorn 在 Macintosh 端口上的工作 Steve Kirkendall Elvis Roger Knobbe 最初移植到 Windows NT Sergey Laskavy Vim 的帮助来自莫斯科 Felix von Leitner 以前的 Vim 邮件列表维护者 David Leonard Python 扩展到 Unix 的移植 Avner Lottem 在从右到左的窗口中编辑 Flemming Madsen X11 客户端-服务器,各种功能和补丁 Tony Mechelynck 回答了许多用户问题 Paul Moore Python 接口扩展,许多补丁 Katsuhito Nagano 多字节版本的开发 Sung-Hyun Nam 多字节版本的开发 Vince Negri Win32 GUI 和通用控制台增强功能 Steve Oualline 第一本 Vim 书的作者 frombook Dominique Pelle Valgrind 报告和许多修复 A.Politz 许多错误报告和一些修复 George V. Reilly Win32 端口,Win32 GUI 启动 Stephen Riehm 错误收集者 Stefan Roemer 各种补丁和对用户的帮助 Ralf Schandl IBM OS/390 端口 Olaf Seibert DICE 和 BeBox 版本,正则表达式改进 Mortaza Shiran Farsi 补丁 Peter da Silva termlib Paul Slootman OS/2 端口 Henry Spencer 正则表达式 Dany St-Amant Macintosh 端口 Tim Thompson Stevie G. R. (Fred) Walter Stevie Sven Verdoolaege Perl 接口 Robert Webb 命令行补全,GUI 版本,以及许多补丁 Ingo Wilken Tcl 接口 Mike Williams PostScript 打印 Juergen Weigert Lattice 版本,AUX 改进,Unix 和 MS-DOS 端口,autoconf Stefan 'Sec' Zehl vim.org 的维护者 Yasuhiro Matsumoto 许多 MS-Windows 改进 Ken Takata 修复和功能 Kazunobu Kuriyama GTK 3 Christian Brabandt 许多修复,功能,用户支持等 Yegappan Lakshmanan 许多快速修复功能
我要感谢所有向我发送错误报告和建议的人。 这个名单太长了,无法在这里全部列出。 没有所有这些人的想法,Vim 不会是现在的样子:他们让 Vim 活跃起来! 和平 友谊 国民幸福总值
文档可能引用 Vi 的其他版本: Vi vi Vi "原始版本"。 如果没有进一步说明,指的是出现在 Sun OS 4.x 中的 Vi 版本。 ":version" 返回 "Version 3.7, 6/7/85"。 源代码仅可通过许可获得。 Nvi
Nvi "新" Vi。 与 BSD 4.4 和 FreeBSD 附带的 Vi 版本。 与原始 Vi 非常兼容,并有一些扩展。 使用的版本是 1.79。 ":version" 返回 "Version 1.79 (10/23/96)"。 源代码是免费提供的。 Elvis
Elvis 另一个 Vi 克隆,由 Steve Kirkendall 制作。 非常紧凑,但不像 Vim 那样灵活。 源代码是免费提供的。
Vim Nvim 基于 Vim。 https://www.vim.org/
Nvim 是 Vim ("Vi IMproved") 文本编辑器的分支,最初由 Bram Moolenaar 开发。 在 Nvim 的源代码中搜索他的名字,就能发现他的多少作品仍然保留在 Nvim 中。 2023 年 8 月 3 日,他去世,享年 62 岁。 如果 Vim 或 Nvim 在你的生活中起到了作用,请阅读 Uganda 并考虑以你认为合适的方式来纪念他。

符号 符号

当使用语法高亮显示阅读时,不按字面意思键入的文本通常用 Special 组高亮显示。 这些是 []、{} 和 <> 中的项目,以及 CTRL-X
请注意,Vim 在命令中使用所有可能的字符。 有时 []、{} 和 <> 是你输入的内容的一部分,上下文应该使这一点很清楚。
[] 方括号中的字符是可选的。
计数 [计数] [计数] 一个可选的数字,可以放在命令前面,用来对命令进行倍数或迭代。 如果没有指定数字,则使用计数 1,除非另有说明。 请注意,在本手册中,[计数] 在命令描述中没有提及,而是在解释中提到。 这样做是为了让命令更容易查找。 如果 'showcmd' 选项打开,则(部分)输入的计数将显示在窗口底部。 你可以使用 <Del> 来擦除最后一位数字 (N<Del>).
[quotex]
["x] 一个可选的寄存器标识,文本可以存储在其中。 请参阅 寄存器。 x 是 'a' 到 'z' 或 'A' 到 'Z' 或 '"' 之间的单个字符,在某些情况下(使用 put 命令)是 '0' 到 '9'、'%'、'#' 或其他字符。 大写和小写字母指定同一个寄存器,但小写字母用于覆盖以前的寄存器内容,而大写字母用于追加到以前的寄存器内容。 没有 ""x" 或使用 """" 时,存储的文本将放入无名寄存器。
{}
{} 花括号表示命令中必须出现的部分,但可以取多个不同的值。 Vim 和 Vi 之间的差异也在花括号中给出(这将从上下文中很清楚)。
{char1-char2}
{char1-char2} char1 到 char2 范围内的单个字符。 例如:{a-z} 是一个小写字母。 可以连接多个范围。 例如,{a-zA-Z0-9} 是任何字母数字字符。
{motion} 移动 {motion} 一个移动光标的命令。 这些在 motion.txt 中有解释。 例子:w 到下一个单词的开头 b 到当前单词的开头 4j 向下四行 /The<CR> 到 "The" 的下一个出现位置 这是在 操作符 命令之后使用的,用来移动操作的文本。
如果移动包含计数,而操作符也包含计数,则两个计数相乘。 例如: "2d3w" 删除六个单词。
移动可以是向后的,例如 "db" 删除到单词的开头。
移动也可以是鼠标点击。 不过,并非所有终端都支持鼠标。
":omap" 命令可用于在操作符处于待命状态时映射字符。
Ex 命令可用于移动光标。这可以用来调用执行某些复杂动作的函数。无论使用什么 ":" 命令,动作始终是字符范围内的排他性动作。这意味着无法包含一行的最后一个字符,而不包括换行符(除非设置了 'virtualedit')。如果 Ex 命令更改了操作符开始之前的文本或跳转到另一个缓冲区,则结果不可预测。可以更改更下层的文本。如果当前缓冲区未卸载,则可以跳转到另一个缓冲区。
{Visual}
{Visual} 一个选定的文本区域。它由 "v"、"V" 或 CTRL-V 命令启动,然后可以使用任何光标移动命令来更改选定文本的末尾。它在 操作符 命令之前使用,以突出显示要操作的文本。请参阅 Visual 模式
<character>
<character> 下表中的特殊字符,可以选择带有修饰符,或带有修饰符的单个 ASCII 字符。
'character'
'c' 一个单个 ASCII 字符。
CTRL-{char}
CTRL-{char} {char} 作为控制字符输入;即,按住 CTRL 键并输入 {char}{char} 的大小写被忽略;因此 CTRL-ACTRL-a 是等效的。但在某些终端和环境中,使用 SHIFT 键将产生不同的代码(例如 CTRL-SHIFT-a);在这些环境中,使用 SHIFT 键不会触发 CTRL-A 等命令。
'option'
'option' 可设置为值的选项或参数,用单引号括起来。请参阅 选项
quotecommandquote
"command" 对可以输入的命令的引用,用双引号括起来。command 新式命令,这将其与其他引号文本和字符串区分开来。
键符号 键码 键码 这些键名在文档中使用。它们也可以与 ":map" 命令一起使用。
符号 含义 等效十进制值
-----------------------------------------------------------------------
<Nul>CTRL-@ 0(存储为 10) <Nul> <BS> 退格 CTRL-H 8 退格 <Tab> 制表符 CTRL-I 9 制表符 Tab 换行符
<NL> 换行符 CTRL-J 10(用于 <Nul><CR> 回车 CTRL-M 13 回车 <Return><CR> 相同 <Return>
<Enter><CR> 相同 <Enter>
<Esc> 转义 CTRL-[ 27 转义 <Esc> <Space> 空格 32 空格 <lt> 小于号 < 60 <lt> <Bslash> 反斜杠 \ 92 反斜杠 <Bslash> <Bar> 竖线 | 124 <Bar> <Del> 删除 127 <CSI> 命令序列介绍 ALT-Esc 155 <CSI>
<EOL> 行尾(可以是 <CR><NL><CR><NL>,取决于系统和 'fileformat'<EOL> <Ignore> 取消等待字符 <Ignore>
<NOP> 无操作:不执行任何操作(在映射中很有用) <Nop>
<Up> 光标向上 光标向上 cursor_up <Down> 光标向下 光标向下 cursor_down <Left> 光标向左 光标向左 cursor_left <Right> 光标向右 光标向右 cursor_right <S-Up> Shift-光标向上 <S-Down> Shift-光标向下 <S-Left> Shift-光标向左 <S-Right> Shift-光标向右 <C-Left> Control-光标向左 <C-Right> Control-光标向右 <F1> - <F12> 功能键 1 到 12 功能键 function-key <S-F1> - <S-F12> Shift-功能键 1 到 12 <S-F1> <Help> 帮助键 <Undo> 撤销键 <Insert> 插入键 <Home> 主页 主页
<End> 结束 结束
<PageUp> 上一页 上一页 page-up <PageDown> 下一页 下一页 page-down <kUp> 键盘光标向上 键盘光标向上
<kDown> 键盘光标向下 键盘光标向下
<kLeft> 键盘光标向左 键盘光标向左
<kRight> 键盘光标向右 键盘光标向右
<kHome> 键盘主页(左上角) 键盘主页 <kEnd> 键盘结束(左下角) 键盘结束
<kOrigin> 键盘原点(中间) 键盘原点
<kPageUp> 键盘上一页(右上角) 键盘上一页 <kPageDown> 键盘下一页(右下角) 键盘下一页 <kDel> 键盘删除 键盘删除
<kPlus> 键盘 + 键盘加号
<kMinus> 键盘 - 键盘减号
<kMultiply> 键盘 * 键盘乘号
<kDivide> 键盘 / 键盘除号
<kPoint> 键盘 . 键盘点
<kComma> 键盘 , 键盘逗号
<kEqual> 键盘 = 键盘等号
<kEnter> 键盘 Enter 键盘回车
<k0> - <k9> 键盘 0 到 9 键盘 0 键盘 9 <S-…> Shift 键 Shift <S- <C-…> Control 键 Control ctrl <C- <M-…> Alt 键或 Meta 键 META ALT <M- <A-…><M-…> 相同 <A-
<T-…> Meta 键(当它不是 Alt 时) <T- <D-…> Command 键或 "超级" 键 <D-
-----------------------------------------------------------------------
注意
某些键(<Help><S-Right> 等)的可用性取决于 UI 或主机终端。
如果 Num Lock 处于开启状态,则 TUI 将接收纯 ASCII 值,因此映射 <k0><k1>、…、<k9><kPoint> 将不起作用。
Nvim 支持映射带有修饰符的多字节字符,例如 <M-ä>。哪些组合实际上有效取决于 UI 或主机终端。
当使用 Meta 或 Alt 修饰符按下键并且该键按下没有映射时,Nvim 的行为可能就像在该键之前按下了 <Esc>
可以表示组合修饰符(例如,<M-C-T> 表示 CTRL-ALT-T),但您的终端必须对该输入进行编码才能使其生效。 tui-input
<>
示例通常以 <> 符号表示。有时这只是为了清楚地说明您需要输入的内容,但通常它可以按字面意义输入,例如,使用 ":map" 命令。规则是:1. 可打印字符直接输入,但反斜杠和 "<" 除外 2. 反斜杠用 "\\"、双反斜杠或 "<Bslash>" 表示。 3. 字面 "<" 用 "\<" 或 "<lt>" 表示。当没有歧义时,可以使用 "<" 直接表示。 4. "<key>" 表示输入的特殊键(请参阅上面的表格)。示例:<Esc> 转义键 <C-G> CTRL-G <Up> 光标向上键 <C-LeftMouse> Control-鼠标左键单击 <S-F11> Shift-功能键 11 <M-a> Meta- a('a' 设置了第 8 位) <M-A> Meta- A('A' 设置了第 8 位)
<> 符号使用 <lt> 来转义键名的特殊含义。使用反斜杠也可以,但只有当 'cpoptions' 不包含 'B' 标志时。
映射 CTRL-H 到六个字符 "<Home>" 的示例
:imap <C-H> \<Home>
:imap <C-H> <lt>Home>
第一个示例只有当 'B' 标志不在 'cpoptions' 中时才有效。第二个示例始终有效。要在映射中获得字面 "<lt>"
:map <C-L> <lt>lt>
该符号可以在双引号字符串中使用,在开头使用 "\<",例如 "\<C-Space>"。这将产生一个特殊键码。要将其转换回可读文本,请使用 keytrans()

模式,简介 vim-modes-intro vim-modes

Vim 有七种基本模式
Normal Normal 模式 命令模式 Normal 模式 在 Normal 模式下,您可以输入所有正常的编辑器命令。如果您启动编辑器,您将处于此模式。这也称为命令模式。
Visual 模式 此模式类似于 Normal 模式,但移动命令会扩展突出显示区域。当使用非移动命令时,它将对突出显示区域执行。请参阅 Visual 模式。如果 'showmode' 选项已开启,则窗口底部将显示 "-- VISUAL --"。
Select 模式 此模式最像 MS-Windows 选择模式。输入可打印字符将删除选择并启动 Insert 模式。请参阅 Select 模式。如果 'showmode' 选项已开启,则窗口底部将显示 "-- SELECT --"。
Insert 模式 在 Insert 模式下,您输入的文本将插入到缓冲区中。请参阅 Insert 模式。如果 'showmode' 选项已开启,则窗口底部将显示 "-- INSERT --"。
Command-line 模式 在 Command-line 模式(也称为 Cmdline 模式)下,您可以在窗口底部输入一行文本。这用于 Ex 命令(":")、模式搜索命令("?" 和 "/")以及过滤器命令("!")。 Cmdline 模式
Ex 模式 类似于命令行模式,但在输入命令后你仍然停留在 Ex 模式。对命令行的编辑功能非常有限。 Ex 模式
终端模式
终端模式 在终端模式下,所有输入(除了 CTRL-\)都会发送到当前 终端 缓冲区中运行的进程。如果按下 CTRL-\,下一个键将被发送,除非它是 CTRL-N (CTRL-\_CTRL-N) 或 CTRL-O (t_CTRL-\_CTRL-O)。如果 'showmode' 选项开启,则 "-- TERMINAL --" 将显示在窗口底部。
还有六种附加模式。这些是基本模式的变体
操作符等待 操作符等待模式 操作符等待模式 类似于普通模式,但在操作符命令开始后,Vim 等待 {motion} 来指定操作符将作用于的文本。
替换模式 替换模式是插入模式的一种特殊情况。你可以执行与插入模式中相同的操作,但对于你输入的每个字符,都会删除现有文本中的一个字符。参见 替换模式。如果 'showmode' 选项开启,则 "-- REPLACE --" 将显示在窗口底部。
虚拟替换模式 虚拟替换模式类似于替换模式,但你替换的是屏幕空间,而不是文件字符。参见 虚拟替换模式。如果 'showmode' 选项开启,则 "-- VREPLACE --" 将显示在窗口底部。
插入普通模式 在插入模式下输入 CTRL-O 时进入(参见 i_CTRL-O)。类似于普通模式,但在执行一个命令后,Vim 会返回插入模式。如果 'showmode' 选项开启,则 "-- (insert) --" 将显示在窗口底部。
插入可视模式 从插入模式开始可视选择时进入,例如,使用 CTRL-O 然后 "v"、"V" 或 CTRL-V。当可视选择结束时,Vim 会返回插入模式。如果 'showmode' 选项开启,则 "-- (insert) VISUAL --" 将显示在窗口底部。
插入选择模式 从插入模式开始选择模式时进入。例如,通过拖动鼠标或 <S-Right>。当选择模式结束时,Vim 会返回插入模式。如果 'showmode' 选项开启,则 "-- (insert) SELECT --" 将显示在窗口底部。

在模式之间切换 模式切换

如果由于任何原因你不知道自己处于哪个模式,你可以随时通过两次输入 <Esc> 返回普通模式。这在 Ex 模式下无效,请使用 ":visual"。当你输入 <Esc> 后看到屏幕闪烁或听到铃声时,你将知道你已经回到了普通模式。但是,在插入模式下使用 CTRL-O 后按 <Esc> 时,你会听到哔声,但你仍然处于插入模式,再次输入 <Esc>
i_esc
从 模式 到 模式
普通 可视 选择 插入 替换 命令行 Ex
Normal                        v V ^V          *4         *1           R gR     : / ? !   Q
Visual                 *2                  ^G         c C            --              :       --
Select                 *5        ^O ^G                 *6            --              --      --
Insert                 <Esc>          --          --                  <Insert>    --      --
Replace         <Esc>          --          --        <Insert>              --      --
Command-line         `*3`          --          --         :start            --                      --
Ex                 :vi          --          --         --            --              --
-- 不可能
* 1 通过给出命令 "i"、"I"、"a"、"A"、"o"、"O"、"c"、"C"、"s" 或 S" 从普通模式切换到插入模式。 * 2 通过给出非移动命令从可视模式切换到普通模式,这会导致命令被执行,或者通过按下 <Esc> "v"、"V" 或 "CTRL-V"(参见 v_v)来停止可视模式,不会产生副作用。 * 3 通过以下操作从命令行模式切换到普通模式
按下 <CR><NL>,这会导致输入的命令被执行。
删除整行(例如,使用 CTRL-U)并给出最终的 <BS>
按下 CTRL-C<Esc>,这将退出命令行而不执行命令。在最后一种情况下,<Esc> 可能是用 'wildchar' 选项定义的字符,在这种情况下,它将启动命令行完成。你可以忽略它并再次输入 <Esc>。 * 4 通过以下操作从普通模式切换到选择模式
'selectmode' 包含 "mouse" 时,使用鼠标选择文本
'selectmode' 选项包含 "key" 时,使用非打印字符命令移动光标,同时按下 Shift 键。
'selectmode' 包含 "cmd" 时,使用 "v"、"V" 或 "CTRL-V"
使用 "gh"、"gH" 或 "g CTRL-H" g_CTRL-H * 5 通过使用非打印字符命令移动光标(不按住 Shift 键)从选择模式切换到普通模式。 * 6 通过输入可打印字符从选择模式切换到插入模式。选择的内容将被删除,并且字符将被插入。
CTRL-\_CTRL-N i_CTRL-\_CTRL-N c_CTRL-\_CTRL-N v_CTRL-\_CTRL-N t_CTRL-\_CTRL-N 此外,命令 CTRL-\ CTRL-N<C-\><C-N> 可用于从任何其他模式切换到普通模式。这可以用来确保 Vim 处于普通模式,而不会像 <Esc> 那样发出哔声。但是,这在 Ex 模式下无效。当在需要参数的命令(如 fm)之后使用时,将应用用 'ttimeoutlen' 设置的超时。
CTRL-\_CTRL-G i_CTRL-\_CTRL-G c_CTRL-\_CTRL-G v_CTRL-\_CTRL-G CTRL-\ CTRL-G 的工作方式与 CTRL-\_CTRL-N 相同,用于向后兼容。
gQ 模式-Ex Ex 模式 Ex EX E501 gQ 切换到 Ex 模式。这类似于一次又一次地键入 ":" 命令,除了
你不需要一直按 ":"。
屏幕不会在每个命令后更新。使用 :vi 命令 (:visual) 退出此模式。

窗口内容 窗口内容

在普通模式和插入/替换模式下,屏幕窗口将显示缓冲区的当前内容:所见即所得。有两个例外
'cpoptions' 选项包含 '$',并且更改在同一行内时,文本不会直接删除,而是在最后一个删除的字符处放置一个 '$'。
在某个窗口中插入文本时,同一文本上的其他窗口不会更新,直到插入完成。
除非 'wrap' 选项关闭(参见下文),否则超过窗口宽度的行将换行。可以将 'linebreak' 选项设置为在空白字符处换行。
如果窗口在缓冲区的最后一行之后有空间,Vim 将在窗口最后几行的第一列中显示 '~',如下所示
+-----------------------+
|some line                |
|last line                |
|~                        |
|~                        |
+-----------------------+
因此,'~' 行表示缓冲区的末尾已到达。
如果窗口中的最后一行无法完全容纳,Vim 将在窗口最后几行的第一列中显示 '@',如下所示
+-----------------------+
|first line                |
|second line                |
|@                        |
|@                        |
+-----------------------+
因此,'@' 行表示有一行无法容纳在窗口中。
'display' 选项中存在 "lastline" 标志时,你不会在窗口左侧看到 '@' 字符。如果最后一行无法完全容纳,则只显示能容纳的部分,最后一行最后三个字符将被替换为 "@@@",如下所示
+-----------------------+
|first line                |
|second line                |
|a very long line that d|
|oesn't fit in the wi@@@|
+-----------------------+
如果只有一行太长而无法容纳在窗口中,则这是一个特殊情况。Vim 将只显示该行的一部分,大约在光标所在的位置。不会显示任何特殊字符,这样你就可以编辑该行的所有部分。
可以使用 hl-NonText 高亮组为 '@' 和 '~' 字符设置特殊高亮。这样可以区分缓冲区中的实际字符和这些字符。
选项 'showbreak' 包含要在换行行前面放置的字符串。
wrap-off
如果 'wrap' 选项关闭,长行不会换行。只显示屏幕上能容纳的部分。如果光标移动到未显示的行的部分,则屏幕将水平滚动。这种方法的优点是可以按照实际情况显示列,并且可以编辑无法容纳在屏幕上的行。缺点是无法一次看到一行中的所有字符。可以将 'sidescroll' 选项设置为要滚动的最小列数。
所有标准 ASCII 字符都直接显示在屏幕上。<Tab> 将被替换为它所代表的空格数。其他非打印字符将被替换为 "^{char}",其中 {char} 是添加了 64 的非打印字符。因此,字符 7(响铃)将显示为 "^G"。127 到 160 之间的字符将被替换为 "~{char}",其中 {char} 是减去了 64 的字符。这些字符在屏幕上占据多个位置。光标只能定位在第一个字符上。
如果你设置了 'number' 选项,所有行前面都会加上它们的编号。提示:如果你不喜欢换行行与行号混合在一起,请将 'showbreak' 选项设置为八个空格:"set showbreak=\ \ \ \ \ \ \ \ "
如果你设置了 'list' 选项,<Tab> 字符不会显示为多个空格,而是显示为 "^I"。'$' 将放置在行尾,以便你可以找到尾随空格。
在命令行模式下,只有命令行本身会正确显示。缓冲区内容的显示会在你返回命令模式时立即更新。
窗口的最后一行用于显示状态和消息。状态消息只有在某个选项开启时才会使用
状态消息 选项 默认 Unix 默认值
当前模式 'showmode' 开启 开启 命令字符 'showcmd' 开启 关闭 光标位置 'ruler' 关闭 关闭
当前模式是 "-- INSERT --" 或 "-- REPLACE --",参见 'showmode'。命令字符是那些你已输入但尚未使用的字符。
如果你使用的是速度较慢的终端,可以关闭状态消息来加快编辑速度
:set nosc noru nosm
如果有错误,将显示错误消息至少一秒钟(反显)。
有些命令会显示受影响的行数。此操作的阈值可以使用 'report' 选项控制(默认值为 2)。
Vim 的名称和当前文件名将在标题栏中显示。当窗口大小调整时,Vim 会自动重新绘制窗口。你可以根据需要缩小窗口,但如果窗口太小,则一行也无法容纳。将窗口宽度至少设置为 40 个字符,以便能够在最后一行读取大多数消息。

定义 定义 行话

缓冲区 包含文本行,通常来自文件。屏幕 Nvim 用于显示内容的整个区域。窗口 缓冲区上的视图。一个缓冲区可以有多个窗口。框架 窗口保存在一个框架树中。每个框架都包含一列、一行或窗口("叶子" 框架)。
屏幕包含一个或多个窗口,由状态行隔开,命令行位于底部。
       +-------------------------------+
screen        | window 1        | window 2        |
       |                |                |
       |                |                |
       |= status line =|= status line =|
       | window 3                        |
       |                                |
       |                                |
       |==== status line ==============|
       |command line                        |
       +-------------------------------+
命令行也用于显示消息。当命令行空间不足时,它会向上滚动屏幕。
区分四种类型的行
缓冲区行 缓冲区中的行。这与从文件读取/写入的行相同。它们可以长达数千个字符。逻辑行 应用了折叠的缓冲区行。封闭折叠中的缓冲区行将更改为单个逻辑行:“+-- 99 行折叠”。它们可以长达数千个字符。窗口行 在窗口中显示的行:应用了换行、换行符等的逻辑行的范围。它们只能与窗口宽度一样长,更长的行会被换行或截断。屏幕行 Nvim 使用的屏幕行。由所有窗口的窗口行组成,并添加了状态行和命令行。它们只能与屏幕宽度一样长。当命令行变长时,它会换行,并且行会向上滚动以腾出空间。
缓冲区行 逻辑行 窗口行 屏幕行
1. 一 1. 一 1. +-- 折叠 1. +-- 折叠 2. 二 2. +-- 折叠 2. 五 2. 五 3. 三 3. 五 3. 六 3. 六 4. 四 4. 六 4. 七 4. 七 5. 五 5. 七 5. === 状态行 === 6. 六 6. aaa 7. 七 7. bbb 8. ccc ccc c 1. aaa 1. aaa 1. aaa 9. cc 2. bbb 2. bbb 2. bbb 10. ddd 3. ccc ccc ccc 3. ccc ccc ccc 3. ccc ccc c 11. ~ 4. ddd 4. ddd 4. cc 12. === 状态行 === 5. ddd 13. (命令行) 6. ~
API 客户端
所有外部 UI 和远程插件(与常规 Vim 插件相反)一般来说都是“客户端”;但是,如果某个东西的目的是为了其他应用程序的方便而抽象或包装 RPC API(就像 REST 客户端或 boto3 之类的 AWS SDK 一样:你可以使用 curl 之类的 HTTP 客户端与 AWS REST 进行通信,但 boto3 将其包装在一个方便的 python 接口中),我们将将其称为“API 客户端”。例如,Nvim lua-client 就是一个 API 客户端:https://github.com/neovim/lua-client
主机
插件“主机”既是客户端(Nvim API 的客户端)又是服务器(外部平台的服务器,例如 python)。它是一个托管其他插件的远程插件。
远程插件
通过 :UpdateRemotePlugins 注册的任意代码,在单独的进程中运行并通过 api 与 Nvim 通信。
主要
命令索引
快速参考