Nvim :help
页面,从 源文件 使用 tree-sitter-vimdoc 解析器 生成。
<BS>
键已经提到了。它删除光标之前的字符。<Del>
键对光标下(之后)的字符执行相同的操作。当你输入了一个错误的单词时,使用 CTRL-W
CTRL-W
CTRL-U
删除它。这保留了光标后的文本和缩进。只有从第一个非空白字符到光标的文本会被删除。在下一行中,光标位于“fallen”的“f”上,按 CTRL-U
会执行以下操作CTRL-U
<Esc>4blraA
<Esc>
向前移动 4 个单词 4b 移动到“o”上方 l 将其替换为“a” ra 重新进入插入模式 A<C-Left><C-Left><C-Left><C-Left><Right><Del>a<End>
<C-Left>
<C-Left>
<C-Left>
<C-Left>
移动到“o”上方 <Right>
删除“o” <Del>
插入“a” a 转到行末 <End>
<End>
键很难在不看键盘的情况下按下)。这些特殊键在编写不会退出插入模式的映射时最有用。额外的输入在这种情况并不重要。在插入模式下可以使用的键的概述<C-Home>
转到文件开头 <PageUp>
向上翻页 <Home>
转到行首 <S-Left>
向左移动一个单词 <C-Left>
向左移动一个单词 <S-Right>
向右移动一个单词 <C-Right>
向右移动一个单词 <End>
转到行尾 <PageDown>
向下翻页 <C-End>
转到文件末尾:set showmatch现在当你输入类似 “(example)” 的文本时,只要你输入 ),Vim 就会将光标短暂地移动到匹配的 (,保持它在那里半秒钟,然后移动回你正在输入的位置。如果没有匹配的 (,Vim 会发出警报。然后你知道你可能忘记了 ( 或输入了过多的 )。匹配项也将显示在 [] 和 {} 对中。你不必等待输入下一个字符,只要 Vim 看到它,光标就会移回,插入会像以前一样继续。你可以使用 'matchtime' 选项来更改 Vim 等待的时间。例如,要让 Vim 等待一秒半
:set matchtime=15时间以十分之一秒为单位。
CTRL-P
,Vim 会猜测剩余的部分。例如,假设你正在创建一个 C 程序,并想输入以下内容CTRL-P
命令完成单词。Vim 搜索以光标前面的内容开头的单词。在本例中,它是“ch_”,与单词 ch_array 匹配。因此,输入 CTRL-P 会得到以下结果CTRL-P
,Vim 会再次搜索以光标前面的单词开头的单词。由于光标前面没有任何内容,它会找到第一个反向的单词,即“ch_array”。再次输入 CTRL-P
会得到下一个匹配的单词,在本例中是“total”。第三次 CTRL-P
会继续向后搜索。如果没有其他内容,它会导致编辑器用完单词,因此它会返回到原始文本,即没有任何内容。第四次 CTRL-P 会导致编辑器再次从“ch_array”开始。CTRL-N
。由于搜索会绕过文件结尾,因此 CTRL-N
和 CTRL-P
会找到相同的匹配项,但顺序不同。提示:CTRL-N
代表下一个匹配项,CTRL-P
代表上一个匹配项。CTRL-X
CTRL-F
文件名 CTRL-X
CTRL-L
整行 CTRL-X
CTRL-D
宏定义(也在包含文件中) CTRL-X
CTRL-I
当前文件和包含文件 CTRL-X
CTRL-K
字典中的单词 CTRL-X
CTRL-T
同义词库中的单词 CTRL-X
CTRL-]
标记 CTRL-X
CTRL-V
Vim 命令行CTRL-X
CTRL-F
为例。这将查找文件名。它会扫描当前目录以查找文件,并显示与光标前面的单词匹配的每个文件。例如,假设你当前目录中有以下文件CTRL-X
CTRL-F
命令。Vim 现在会通过查看当前目录中的文件来完成当前单词“sub”。第一个匹配项是 sub_count.c。这不是你想要的,因此你通过输入 CTRL-N
来匹配下一个文件。这个匹配项是 sub_done.c。再次输入 CTRL-N
会带你到 sub_exit.c。结果CTRL-X
CTRL-F
。这将匹配“/usr”(这是在 Unix 上)CTRL-N
,你会回到“/u”。相反,要接受“/usr/”并深入一层目录,请再次使用 CTRL-X
CTRL-F
CTRL-X
CTRL-O
。显然,O 在这里代表 Omni,这样你更容易记住它。让我们以编辑 C 源代码为例{ struct foo *p; p->光标位于“p->”之后。现在输入
CTRL-X
CTRL-O
。Vim 会向你提供一个备选列表,这些备选是“struct foo”包含的项。这与使用 CTRL-P
非常不同,CTRL-P
会完成任何单词,而这里只有“struct foo”的成员是有效的。filetype plugin on或者
filetype plugin indent on对于 C 代码,你需要创建一个标记文件并设置 'tags' 选项。这在 ft-c-omni 中有解释。对于其他文件类型,你可能需要做类似的事情,请查看下面的 compl-omni-filetypes。它只适用于特定的文件类型。检查 'omnifunc' 选项的值,以确定它是否有效。
CTRL-A
,编辑器会插入你上次在插入模式下输入的文本。例如,假设你有一个以以下内容开头的文件"file.h" ~ /* Main program begins */ ~你通过在第一行的开头插入“#include ”来编辑此文件
#include "file.h" ~ /* Main program begins */ ~你使用“j^”命令向下移动到下一行的开头。你现在开始插入一个新的“#include”行。因此你输入
i CTRL-A结果如下
#include "file.h" ~ #include /* Main program begins */ ~插入了“#include ”,因为
CTRL-A
会插入之前的插入文本。现在你输入“main.h”<Enter> 来完成这一行#include "file.h" ~ #include "main.h" ~ /* Main program begins */ ~
CTRL-@
命令会执行 CTRL-A
然后退出插入模式。这是一种快速执行完全相同的插入操作的方式。CTRL-Y
命令会插入光标上方的字符。当你复制前一行时,这很有用。例如,你有一行 C 代码CTRL-Y
14 次,直到你到达“next”的“n”。CTRL-Y
直到下一个“next”。CTRL-E
命令的作用与CTRL-Y
相同,只是它在光标下方插入字符。CTRL-R
{register}
命令插入寄存器的内容。这对于避免输入长词很有用。例如,你需要输入:"vyiw"v 是寄存器规范,“yiw” 是剪切内词。现在编辑要插入新行的文件,并输入前几个字母。
CTRL-R
v 插入函数名称。<BS>
或其他特殊字符,它们将被解释为从键盘输入的字符。如果你不希望发生这种情况(你确实想要在文本中插入<BS>
),请使用CTRL-R
CTRL-R
{register}
命令。:iabbrev ad advertisement现在,当你输入“ad”时,整个词“advertisement”将被插入到文本中。这可以通过输入一个不能作为词的一部分的字符来触发,例如空格。
:iabbrev JB Jack Benny作为一名程序员,我使用两个比较不寻常的缩写。
:iabbrev #b /**************************************** :iabbrev #e <Space>****************************************/这些用于创建方框注释。注释以 #b 开头,绘制顶线。然后我输入注释文本,并使用 #e 绘制底线。请注意,#e 缩写以空格开头。换句话说,前两个字符是空格-星号。通常,Vim 会忽略缩写和展开之间的空格。为了避免这个问题,我将空格拼写为七个字符:<, S, p, a, c, e, >。
:abbreviate teh the你可以添加一个完整的列表。每次你发现一个常见的错误时就添加一个。
:abbreviate i #e ****************************************/ i #b /**************************************** i JB Jack Benny i ad advertisement ! teh the第一列中的“i”表示插入模式。这些缩写只在插入模式下有效。其他可能的字符是:
:edit ad
:abbreviate @f fresh你可以用以下命令删除它。
:unabbreviate @f当你输入这个命令时,你会注意到 @f 被扩展为“fresh”。不要担心,Vim 仍然可以理解它(除非你有一个针对“fresh”的缩写,但这不太可能)。要删除所有缩写,请使用以下命令:
:abclear":unabbreviate" 和 ":abclear" 也有适用于插入模式的变体(":iunabbreviate" 和 ":iabclear")以及命令行模式的变体(":cunabbreviate" 和 ":cabclear")。
:abbreviate @a adder :imap dd disk-door现在当你输入 @a 时,你将得到“adisk-doorer”。这不是你想要的。为了避免这种情况,请使用“:noreabbrev”命令。它与“:abbreviate”的作用相同,但它会避免生成的字符串被用于映射。
:noreabbrev @a adder幸运的是,缩写的结果不太可能被映射。
CTRL-V
命令用于按字面意思插入下一个字符。换句话说,字符的任何特殊含义都将被忽略。例如CTRL-V <Esc>插入一个转义字符。因此你不会退出插入模式。(不要在
CTRL-V
后输入空格,只是为了让这个更容易阅读)。CTRL-V
用于粘贴文本。请使用CTRL-Q
代替CTRL-V
。另一方面,在 Unix 上,CTRL-Q
在某些终端上不起作用,因为它具有特殊的含义。CTRL-V
{digits}
命令来插入具有十进制数{digits}
的字符。例如,字符号 127 是<Del>
字符(但不一定是<Del>
键!)。要插入<Del>
,请键入:CTRL-V 127你可以用这种方式输入高达 255 个字符。当你输入少于两位数字时,非数字字符将终止命令。为了避免需要输入非数字字符,请在前面加一个或两个零,使其成为三位数字。所有接下来的命令都插入一个
<Tab>
,然后是一个点。CTRL-V
9. CTRL-V
09. CTRL-V
009.CTRL-V
后面加上一个“x”。CTRL-V x7f这也适用于高达字符 255(
CTRL-V
xff)。你可以使用“o”来用八进制数输入字符,还有两种方法允许你输入高达 16 位和 32 位的数字(例如,对于 Unicode 字符)。CTRL-V o123 CTRL-V u1234 CTRL-V U12345678
CTRL-K Co要找出哪些二字符组合可用,请使用以下命令:
:digraphsVim 将显示二字符组合表。这是其中的三行。
CTRL-K
Pd 得到的二字符组合是字符(£)。这是字符号 163(十进制)。Pd 代表 Pound(英镑)。大多数二字符组合都是为了给你一个关于它们将产生的字符的提示。如果你仔细查看列表,你会理解其中的逻辑。你可以交换第一个和第二个字符,如果不存在该组合的二字符组合。因此CTRL-K
dP 也有效。由于不存在“dP”的二字符组合,Vim 也会搜索“Pd”二字符组合。:digraph a" ä这定义了
CTRL-K
a" 插入一个 ä 字符。你也可以使用十进制数来指定字符。这定义了相同的二字符组合。:digraph a" 228有关二字符组合的更多信息,请参阅:digraphs 另一种插入特殊字符的方法是使用键映射。有关更多信息,请参阅:45.5
<Esc>
退出插入模式,执行正常模式命令,然后使用“i”或“a”重新进入插入模式。还有一种更快捷的方法。使用CTRL-O
{command}
,你可以从插入模式执行任何正常模式命令。例如,要从光标删除到行尾,请使用以下命令:CTRL-O D你只能用这种方法执行一个正常模式命令。但是你可以指定一个寄存器或一个计数。一个更复杂的例子:
CTRL-O "g3dw这会将光标到第三个词之间的内容删除到寄存器 g 中。