Nvim :help
页面,生成 自 来源 使用 tree-sitter-vimdoc 解析器。
CTRL-V
。要插入一个 <Nul>
字符,请使用“CTRL-V CTRL-@
”或“CTRL-V 000”。在某些系统上,您必须使用“CTRL-V 003”来插入一个 CTRL-C
。注意:当 CTRL-V
被映射时,您通常可以使用 CTRL-Q
代替 i_CTRL-Q。<Esc>
或 CTRL-[
结束插入或替换模式,返回到正常模式。完成缩写。注意:如果您的 <Esc>
键很难按,请尝试使用 CTRL-[
代替。 i_META i_ALT ALT (META) 如果和弦未映射,则可能像 <Esc>
一样起作用。例如,<A-x>
如果 <A-x>
没有插入模式映射,则像 <Esc>
x 一样起作用。 i_CTRL-C<BS>
或 CTRL-H
删除光标前的字符(有关联接行,请参阅 i_backspacing)。 i_<Del> i_DEL <Del>
删除光标下的字符。如果光标位于行尾,并且 'backspace' 选项包含“eol”(默认值),则删除 <EOL>
;下一行将追加到当前行的后面。 i_CTRL-W<Tab>
或 CTRL-I
插入一个制表符。如果 'expandtab' 选项处于打开状态,则会插入等效数量的空格(使用 CTRL-V
<Tab>
以避免扩展;如果 CTRL-V
被映射,请使用 CTRL-Q
<Tab>
i_CTRL-Q)。另请参见 'smarttab' 选项和 ins-expandtab。 i_CTRL-J i_<NL> <NL>
或 CTRL-J
开始新行。 i_CTRL-M i_<CR> <CR>
或 CTRL-M
开始新行。 i_CTRL-K{char1}
[char2] 输入二元图(请参阅 二元图)。当 {char1}
是一个特殊键时,该键的代码将以 <> 形式插入。例如,字符串“<S-Space>”可以通过键入 <C-K>
<S-Space>
(两个键)来输入。这两个字符都不被视为映射。{register}
i_CTRL-RCTRL-R
和第二个字符之间,将显示“"”,以指示您需要输入寄存器的名称。文本将像您键入它一样插入,但不会使用映射和缩写。如果设置了诸如 'textwidth'、'formatoptions' 或 'autoindent' 之类的选项,这将影响将要插入的内容。这与使用“p”命令和使用鼠标粘贴不同。特殊寄存器:“" 未命名的寄存器,包含最后一次删除或 yank 的文本 "%" 当前文件名 "#" 备用文件名 "*" 剪贴板内容(X11:主要选择) "+" 剪贴板内容 "/" 最后一次搜索模式 ":" 最后一次命令行 "." 最后插入的文本 i_CTRL-R_-CTRL-R
="\<Up>" 使用 CTRL-R
CTRL-R
来逐字插入文本。当结果是 List 时,这些项目用作行。它们内部也可以有换行符。当结果是 Float 时,它会自动转换为 String。当调用 append() 或 setline() 时,撤销序列将被破坏。有关寄存器,请参阅 registers。CTRL-R
{register}
i_CTRL-R_CTRL-RCTRL-R
一样,但文本将逐字插入,而不是像键入一样插入。当寄存器包含 <BS>
之类的字符时,这一点会有所不同。例如,当寄存器 a 包含“ab^Hc”时CTRL-R a results in "ac". CTRL-R CTRL-R a results in "ab^Hc".
CTRL-R
CTRL-O
,见下文。'.' 寄存器(最后插入的文本)仍然像键入一样插入。在此命令之后,'.' 寄存器包含来自寄存器的文本,就好像它是通过键入插入的一样。CTRL-O
{register}
i_CTRL-R_CTRL-OP
一样在当前行的上面插入文本。'.' 寄存器(最后插入的文本)仍然像键入一样插入。在此命令之后,'.' 寄存器包含键入的命令,而不是文本。即,文字 "^R^O" 而不是来自寄存器的文本。不会替换 替换模式 中的字符!CTRL-P
{register}
i_CTRL-R_CTRL-PCTRL-V
之后键入的字符不会被视为映射。对于特殊键,CTRL 修饰符可以包含在键中以生成一个控制字符。如果该键没有控制字符,则会插入它的 key-notation。注意:当 CTRL-V
被映射(例如,粘贴文本)时,您通常可以使用 CTRL-Q
代替 i_CTRL-Q。CTRL-V
相同,但不要尝试将 CTRL 修饰符包含在键中。CTRL-E
和 CTRL-Y
,不会使用 'textwidth',以便能够从长行中复制字符。CTRL-_
将光标移动到键入文本的末尾。CTRL-^
切换是否使用键入语言字符。当定义语言 :lmap 映射时CTRL-W
和 CTRL-U
在开始位置停止一次<EOL>
。<C-V>
032。您可以省略前导零,在这种情况下,在数字后输入的字符必须是非数字字符。这在其他模式下也是如此:只要您输入的字符对该模式无效,之前的数值就会被使用,并且“无效”字符将以正常方式处理。<NL>
,它在内部用于表示 <Nul>
字符。将缓冲区写入文件时,<NL>
字符将被转换为 <Nul>
。<NL>
字符将写入每行末尾。因此,如果您要在文件中插入 <NL>
字符,则需要进行换行。另请参见 'fileformat'。CTRL-X
后,每次 CTRL-E
(CTRL-Y
) 将窗口向上 (向下) 滚动一行,除非这会导致光标从其在文件中的当前位置移动。只要按下另一个键,CTRL-X
模式就会退出,并且该键将按插入模式解释。CTRL-O
。<Up>
光标向上移动一行<Down>
光标向下移动一行 i_<Down><Up>
光标向上移动一行,插入开始列 i_CTRL-G_<Up>CTRL-K
光标向上移动一行,插入开始列 i_CTRL-G_CTRL-K<Down>
光标向下移动一行,插入开始列 i_CTRL-G_<Down> CTRL-G j 光标向下移动一行,插入开始列 i_CTRL-G_j CTRL-G CTRL-J
光标向下移动一行,插入开始列 i_CTRL-G_CTRL-J <Left>
光标向左移动一个字符 i_<Left><Right>
光标向右移动一个字符 i_<Right><S-Left>
光标向后移动一个单词(类似“b”命令) i_<S-Left><C-Left>
光标向后移动一个单词(类似“b”命令) i_<C-Left><S-Right>
光标向前移动一个单词(类似“w”命令) i_<S-Right> <C-Right>
光标向前移动一个单词(类似“w”命令) i_<C-Right> <Home>
光标移动到行中的第一个字符 i_<Home><End>
光标移动到行中最后一个字符之后 i_<End><C-Home>
光标移动到文件中的第一个字符 i_<C-Home><C-End>
光标移动到文件中的最后一个字符之后 i_<C-End><LeftMouse>
光标移动到鼠标点击的位置 i_<LeftMouse><S-Up>
将窗口向上移动一页 i_<S-Up><PageUp>
将窗口向上移动一页 i_<PageUp><S-Down>
将窗口向下移动一页 i_<S-Down><PageDown>
将窗口向下移动一页 i_<PageDown><ScrollWheelDown>
将窗口向下移动三行 i_<ScrollWheelDown> <S-ScrollWheelDown>
将窗口向下移动一页 i_<S-ScrollWheelDown><ScrollWheelUp>
将窗口向上移动三行 i_<ScrollWheelUp><S-ScrollWheelUp>
将窗口向上移动一页 i_<S-ScrollWheelUp><ScrollWheelLeft>
将窗口向左移动六列 i_<ScrollWheelLeft> <S-ScrollWheelLeft>
将窗口向左移动一页 i_<S-ScrollWheelLeft><ScrollWheelRight>
将窗口向右移动六列 i_<ScrollWheelRight> <S-ScrollWheelRight>
将窗口向右移动一页 i_<S-ScrollWheelRight>CTRL-\
CTRL-O
类似于 CTRL-O
,但不移动光标 i_CTRL-\_CTRL-OCTRL-O
命令有时会有副作用:如果光标位于行尾之后,它将被放在行中的最后一个字符上。在映射中,最好使用 <Esc>
(首先在文本中输入“x”,<Esc>
之后会始终将光标放在它上面)。或者使用 CTRL-\
CTRL-O
,但要小心光标可能位于行尾之后。请注意,CTRL-\
CTRL-O
后面的命令仍然可以移动光标,它不会恢复到原始位置。CTRL-O
命令将您带到普通模式。如果您随后使用一个命令再次进入插入模式,它通常不会嵌套。因此,当输入“a<C-O>a”然后 <Esc>
将您带回到普通模式时,您不需要输入 <Esc>
两次。一个例外是当不输入命令时,例如执行映射或加载脚本时。这使得简要切换到插入模式的映射能够正常工作。CTRL-O
之后重复命令的效果过于复杂。CTRL-G
u 的示例:inoremap <C-H> <C-G>u<C-H>这会重新定义退格键,使其开始新的撤消序列。现在,您可以撤消退格键的效果,而不会更改在此之前键入的内容,方法是使用
CTRL-O
u。另一个示例:inoremap <CR> <C-]><C-G>u<CR>这会在每个换行符处开始一个新的撤消块。它还会在此之前扩展缩写。
CTRL-G
U 的示例inoremap <Left> <C-G>U<Left> inoremap <Right> <C-G>U<Right> inoremap <expr> <Home> col('.') == match(getline('.'), '\S') + 1 ? \ repeat('<C-G>U<Left>', col('.') - 1) : \ (col('.') < match(getline('.'), '\S') ? \ repeat('<C-G>U<Right>', match(getline('.'), '\S') + 0) : \ repeat('<C-G>U<Left>', col('.') - 1 - match(getline('.'), '\S'))) inoremap <expr> <End> repeat('<C-G>U<Right>', col('$') - col('.')) inoremap ( ()<C-G>U<Left>这使得可以在插入模式下使用光标键,而不会开始新的撤消块,因此使用 .(重做)将按预期工作。同样,输入类似的文本(使用上述“(”映射)
CTRL-O
会拆分撤消操作:它之前和之后键入的文本会分别撤消。如果您想避免这种情况(例如,在映射中),您可以使用 CTRL-R
= i_CTRL-R。例如,要调用一个函数:imap <F2> <C-R>=MyFunc()<CR>当 'whichwrap' 选项适当地设置时,行首/行尾的
<Left>
和 <Right>
键会使光标环绕到前一行/后一行。CTRL-G
j 和 CTRL-G
k 命令可用于在列前插入文本。示例int i; int j;将光标放在第一个“int”上,键入“istatic
<C-G>
j”。结果是static int i; int j;要在每行中列前插入相同的文本,请使用视觉块命令“I” v_b_I。
<Tab>
,请先键入 CTRL-V
(如果 CTRL-V
已映射 i_CTRL-Q,则使用 CTRL-Q
)。默认情况下, 'expandtab' 选项处于关闭状态。请注意,在替换模式下,单个字符将替换为多个空格。这样会导致行中的字符数增加。退格键将一次删除一个空格。只有当您退格一个空格(最后一个)时,才会还原原始字符。<Tab>
会在行首插入 'shiftwidth' 个位置,在其他位置插入 'tabstop' 个位置。这意味着通常会插入空格而不是 <Tab>
字符。当 'smarttab' 处于关闭状态时,一个 <Tab>
始终会插入 'tabstop' 个位置,而 'shiftwidth' 只用于 ">>" 等操作。<Tab>
会插入 'softtabstop' 个位置,而用于删除空白的 <BS>
将删除 'softtabstop' 个位置。这感觉就像 'tabstop' 被设置为 'softtabstop',但实际的 <Tab>
字符仍然占用 'tabstop' 个位置,因此您的文件在其他应用程序中使用时仍然会保持正确的外观。<BS>
将尝试删除尽可能多的空白以移动到上一个 'softtabstop' 位置,除非之前插入的字符是空格,在这种情况下,它只会删除光标之前的字符。否则,您不能总是删除光标之前的单个字符。您必须先删除 'softtabstop' 个字符,然后键入额外的空格才能到达您想要的位置。<NL>
,则会插入换行符,不会删除任何字符。<Tab>
字符。如果在 <Tab>
字符的位置键入普通打印字符,字符数将保持不变,但列数将变小。<BS>
、CTRL-W
或 CTRL-U
),则会删除更改。被替换的字符将被还原。如果您已键入超过现有文本,则会删除您添加的字符。这实际上是一次性撤销字符。<Tab>
将用多个空格替换一个字符。这样会导致行中的字符数增加。退格键将一次删除一个空格。只有当您退格一个空格(最后一个)时,才会还原原始字符。<Tab>
,它可能会替换多个普通字符,如果您在 <Tab>
上键入一个字母,它可能根本不会替换任何内容,因为 <Tab>
仍然会与之前对齐到相同的位置。<NL>
仍然不会导致文件中的后续字符似乎移动。当前行的其余部分将被 <NL>
替换(即,它们将被删除),并且替换将在下一行继续。除非您超过文件末尾,否则不会插入新行。CTRL-T
和 CTRL-D
时,会看到有趣的效果。光标之前的字符会像平常一样向侧面移动,但行中的后续字符仍然保持静止。CTRL-T
会将一些旧行隐藏在移动的字符下方,但 CTRL-D
会再次显示它们。<BS>
等将还原被替换的字符。这仍然与 'smartindent'、CTRL-T
和 CTRL-D、 'expandtab'、 'smarttab'、 'softtabstop' 等一起工作。<Tab>
分隔的列,以及在保持所有列对齐的情况下输入新数据非常有用。CTRL-N
和 CTRL-P
之外,所有这些操作都在 CTRL-X
模式下完成。这是插入和替换模式的子模式。您可以通过键入 CTRL-X
和一个 CTRL-X
命令来进入 CTRL-X
模式。您可以通过键入一个不是有效 CTRL-X
模式命令的键来退出 CTRL-X
模式。有效的键是 CTRL-X
命令本身、CTRL-N(下一个)和 CTRL-P
(上一个)。CTRL-X
模式下有效的键不会被映射。这允许 :map <C-F> <C-X><C-F>
工作。结束 CTRL-X
模式的键(任何不是有效 CTRL-X
模式命令的键)都已映射。此外,当使用 'complete' 进行完成时,映射会照常应用。:inoremap <C-]> <C-X><C-]> :inoremap <C-F> <C-X><C-F> :inoremap <C-D> <C-X><C-D> :inoremap <C-L> <C-X><C-L>作为一个特殊情况,输入
CTRL-R
执行寄存器插入(参见 i_CTRL-R)不会退出CTRL-X
模式。这主要是为了允许使用“=”寄存器调用某些函数来确定下一个操作。如果寄存器的内容(或“=”寄存器评估的结果)不是有效的CTRL-X
模式键,则CTRL-X
模式将退出,就像这些键已被输入一样。<Tab>
,如果当前行当前仅包含空格,则实际插入<Tab>
,或者启动/继续CTRL-N
完成操作。function! CleverTab() if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$' return "\<Tab>" else return "\<C-N>" endif endfunction inoremap <Tab> <C-R>=CleverTab()<CR>完成整行 compl-whole-line
CTRL-L
向后搜索以当前行中光标之前的相同字符开头的行。忽略缩进。匹配的行插入到光标前面。 'complete' 选项用于决定搜索哪些缓冲区以进行匹配。同时使用加载和未加载的缓冲区。CTRL-L
或 CTRL-P
向后搜索下一个匹配行。此行将替换上一个匹配行。CTRL-N
向前搜索下一个匹配行。此行将替换上一个匹配行。CTRL-X
CTRL-L
在扩展行之后,您还可以通过再次输入CTRL-X
CTRL-L
来获取其旁边的行,除非使用双CTRL-X
。仅适用于已加载的缓冲区。CTRL-P
向后搜索以光标前的关键字开头的单词。找到的关键字插入到光标前面。CTRL-N
向前搜索下一个匹配的关键字。此关键字将替换上一个匹配的关键字。CTRL-P
向后搜索下一个匹配的关键字。此关键字将替换上一个匹配的关键字。CTRL-X
CTRL-N
或 CTRL-X
CTRL-P
除非使用双CTRL-X
,否则进一步使用CTRL-X
CTRL-N
或 CTRL-X
CTRL-P
将复制先前扩展中其他上下文中的后续单词。CTRL-N
和 CTRL-P
都将插入不同的匹配项(除非只有一个匹配的关键字)。CTRL-X
CTRL-P
或 CTRL-X
CTRL-N
来获取其他上下文中的后续单词。这些序列搜索刚刚扩展的文本并通过获取一个额外的单词来进一步扩展。如果您需要重复一系列复杂的单词,这将很有用。尽管CTRL-P
和 CTRL-N
仅查找至少两个字符的字符串,但CTRL-X
CTRL-P
和 CTRL-X CTRL-N
可用于扩展仅包含一个字符的单词。例如,要获取:México,您可以输入:M^N^P^X^P^X^P CTRL-N 启动扩展,然后CTRL-P
取回单个字符“M”,接下来的两个CTRL-X
CTRL-P
获取单词“é”和“;xico”。CTRL-X
CTRL-P
或 CTRL-X
CTRL-N
将搜索以该单词开头的那些行。CTRL-K
使用 'dictionary' 选项提供的文件搜索以光标前的关键字开头的单词。这与CTRL-N
相似,但只搜索字典文件,不搜索当前文件。找到的关键字插入到光标前面。这可能会非常慢,因为所有匹配项都会在使用第一个匹配项之前找到。默认情况下, 'dictionary' 选项为空。有关查找单词列表的位置的建议,请参见 'dictionary' 选项。 'ignorecase'、'smartcase' 和 'infercase' 适用。CTRL-K
或 CTRL-N
向前搜索下一个匹配的关键字。此关键字将替换上一个匹配的关键字。CTRL-P
向后搜索下一个匹配的关键字。此关键字将替换上一个匹配的关键字。CTRL-T
的工作方式与CTRL-X
CTRL-K
相似,但方式特殊。它使用 'thesaurus' 选项而不是 'dictionary'。如果在词库文件中找到匹配项,则同一行上的所有剩余单词都将包含在匹配项中,即使它们不完成该单词。因此,可以完全替换单词。CTRL-T
或 CTRL-N
向前搜索下一个匹配的关键字。此关键字将替换上一个匹配的关键字。CTRL-P
向后搜索下一个匹配的关键字。此关键字将替换上一个匹配的关键字。angry furious mad enraged将光标放在字母“ang”之后并输入
CTRL-X
CTRL-T
将完成单词“angry”;后续按压将更改单词为“furious”、“mad”等。func Thesaur(findstart, base) if a:findstart return searchpos('\<', 'bnW', line('.'))[1] - 1 endif let res = [] let h = '' for l in systemlist('aiksaurus ' .. shellescape(a:base)) if l[:3] == '=== ' let h = '(' .. substitute(l[4:], ' =*$', ')', '') elseif l ==# 'Alphabetically similar known words are: ' let h = "\U0001f52e" elseif l[0] =~ '\a' || (h ==# "\U0001f52e" && l[0] ==# "\t") call extend(res, map(split(substitute(l, '^\t', '', ''), ', '), {_, val -> {'word': val, 'menu': h}})) endif endfor return res endfunc if exists('+thesaurusfunc') set thesaurusfunc=Thesaur endif完成当前文件和包含文件中的关键字 compl-keyword
CTRL-N
向前搜索下一个匹配的关键字。此关键字将替换上一个匹配的关键字。 注意:CTRL-I
与<Tab>
相同,后者很可能在完成成功后输入,因此CTRL-I
不用于搜索下一个匹配项。CTRL-P
向后搜索上一个匹配的关键字。此关键字将替换上一个匹配的关键字。CTRL-X
CTRL-I
除非使用双CTRL-X
,否则进一步使用CTRL-X
CTRL-I
将复制先前扩展中其他上下文中的后续单词。CTRL-]
搜索以光标之前的相同字符开头的第一个标签。匹配的标签插入到光标前面。字母字符和 'iskeyword' 中的字符用于决定哪些字符包含在标签名中(与关键字相同)。另请参见 CTRL-]。 'showfulltag' 选项可用于添加标签定义周围的上下文。CTRL-]
或 CTRL-N
向前搜索下一个匹配的标签。此标签将替换上一个匹配的标签。CTRL-P
向后搜索上一个匹配的标签。此标签将替换上一个匹配的标签。CTRL-F
搜索以光标之前的相同字符开头的第一个文件名。匹配的文件名插入到光标前面。字母字符和 'isfname' 中的字符用于决定哪些字符包含在文件名中。 注意:'path' 选项在此处不适用(尚未)。CTRL-F
或 CTRL-N
向前搜索下一个匹配的文件名。此文件名将替换上一个匹配的文件名。CTRL-P
向后搜索上一个匹配的文件名。此文件名将替换上一个匹配的文件名。CTRL-D
在当前文件和包含文件中搜索以光标之前的相同字符开头的第一个定义(或宏)名称。找到的定义名称插入到光标前面。CTRL-D
或 CTRL-N
向前搜索下一个匹配的宏名称。此宏名称将替换上一个匹配的宏名称。CTRL-P
向后搜索上一个匹配的宏名称。此宏名称将替换上一个匹配的宏名称。CTRL-X
CTRL-D
除非使用双CTRL-X
,否则进一步使用CTRL-X
CTRL-D
将复制先前扩展中其他上下文中的后续单词。CTRL-V
猜测光标前的项目类型并找到第一个匹配项。 注意: 当 CTRL-V
被映射时,你通常可以使用 CTRL-Q
来代替 i_CTRL-Q。 CTRL-V
或 CTRL-N
向前搜索下一个匹配项。此匹配项将替换上一个匹配项。CTRL-P
向后搜索上一个匹配项。此匹配项将替换上一个匹配项。CTRL-X
CTRL-V
CTRL-X
CTRL-V
的进一步使用将与 CTRL-V
相同。这允许将一个键映射到执行 Vim 命令补全,例如:imap <Tab> <C-X><C-V>用户定义的补全 compl-function
CTRL-P
使用上一个匹配项。此匹配项将替换上一个匹配项。CTRL-P
使用上一个匹配项。此匹配项将替换上一个匹配项。CTRL-S
在许多 Unix 终端中会暂停显示。使用 's' 代替。键入 CTRL-Q 以恢复显示。CTRL-S
或 CTRL-X s 找到光标前的单词并找到它的第一个拼写建议。 CTRL-S
或 CTRL-N
使用下一个建议。这将替换上一个建议。注意,你不能在这里使用 's'。CTRL-P
使用上一个建议。这将替换上一个建议。CTRL-N
向前搜索下一个匹配的关键字。此关键字将替换上一个匹配的关键字。CTRL-P
向后搜索下一个匹配的关键字。此关键字将替换上一个匹配的关键字。CTRL-X
CTRL-N
或 CTRL-X
CTRL-P
除非使用双CTRL-X
,否则进一步使用CTRL-X
CTRL-N
或 CTRL-X
CTRL-P
将复制先前扩展中其他上下文中的后续单词。local triggers = {"."}
vim.api.nvim_create_autocmd("InsertCharPre", {
buffer = vim.api.nvim_get_current_buf(),
callback = function()
if vim.fn.pumvisible() == 1 or vim.fn.state("m") == "m" then
return
end
local char = vim.v.char
if vim.list_contains(triggers, char) then
local key = vim.keycode("<C-x><C-n>")
vim.api.nvim_feedkeys(key, "m", false)
end
end
})
let matches = ... list of words ... return {'words': matches, 'refresh': 'always'}
fun! CompleteMonths(findstart, base) if a:findstart " locate the start of the word let line = getline('.') let start = col('.') - 1 while start > 0 && line[start - 1] =~ '\a' let start -= 1 endwhile return start else " find months matching with "a:base" let res = [] for m in split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec") if m =~ '^' .. a:base call add(res, m) endif endfor return res endif endfun set completefunc=CompleteMonths
fun! CompleteMonths(findstart, base) if a:findstart " locate the start of the word let line = getline('.') let start = col('.') - 1 while start > 0 && line[start - 1] =~ '\a' let start -= 1 endwhile return start else " find months matching with "a:base" for m in split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec") if m =~ '^' .. a:base call complete_add(m) endif sleep 300m " simulate searching for next match if complete_check() break endif endfor return [] endif endfun set completefunc=CompleteMonths
CTRL-N
或 CTRL-P
之后。2. 已使用光标键选择另一个匹配项。然后没有插入匹配项,只是弹出菜单中的条目被突出显示。3. 仅插入匹配项的一部分,并且输入了字符或使用了退格键。然后根据光标前的内容调整匹配项列表。CTRL-N
或 CTRL-P
,你将进入第一种状态。这不会更改匹配项列表。CTRL-P
:imap <F7> <C-N><C-P>
<BS>
和 CTRL-H
删除一个字符,查找光标前单词的匹配项。这会减少匹配项列表,通常减少到一个条目,并切换到第二种状态。任何非特殊字符:停止补全,不更改匹配项,并插入键入的字符。<BS>
和 CTRL-H
删除一个字符,查找光标前较短单词的匹配项。这可能会找到更多匹配项。CTRL-L 从当前匹配项中添加一个字符,可能会减少匹配项数量。任何可打印的非空白字符:添加此字符并减少匹配项数量。<PageUp>
选择几个条目之前的匹配项,但不插入。<PageDown>
选择几个条目之后的匹配项,但不插入。<Up>
选择上一个匹配项,就像使用了 CTRL-P
一样,但不插入。<Down>
选择下一个匹配项,就像使用了 CTRL-N
一样,但不插入。<Space>
或 <Tab>
停止补全,不更改匹配项,并插入键入的字符。<Enter>
键的行为取决于您所处的状态:第一种状态:使用文本原样并插入换行符。第二种状态:插入当前选定的匹配项。第三种状态:使用文本原样并插入换行符。<Enter>
键会插入该匹配项。如果您键入了其他内容,那么 <Enter>
键会插入换行符。:inoremap <Down> <C-R>=pumvisible() ? "\<lt>C-N>" : "\<lt>Down>"<CR>您可以在映射中使用
<expr>
,以便在键入字符并满足某些条件时使用弹出菜单。例如,键入一个点inoremap <expr> . MayComplete() func MayComplete() if (can complete) return ".\<C-X>\<C-O>" endif return '.' endfunc有关更多信息,请参阅 :map-<expr>。
{filetype}
的文件应该在 'runtimepath' 中的 autoload/{filetype}complete.vim。因此,对于“java”,它是 autoload/javacomplete.vim。% ctags -R -f ~/.config/nvim/systags /usr/include /usr/local/include在您的 vimrc 文件中,将此标签文件添加到 'tags' 选项中
set tags+=~/.config/nvim/systags在没有任何“.”或“->”的情况下,使用
CTRL-X
CTRL-O
补全名称时,会直接从标签文件中补全。这适用于任何标识符,也包括函数名。如果您想补全一个不在标签文件中出现的局部变量名,请使用 CTRL-P
代替。CTRL-X
CTRL-O
补全带有“.”或“->”的内容时,Vim 会尝试识别变量的类型并找出它有哪些成员。这意味着只有对变量有效的成员才会被列出。CTRL-X
CTRL-O
会为复合类型添加“.”或“->”。CTRL-O
提供了对 (X)HTML 文件中各种元素的补全。它旨在支持编写 XHTML 1.0 Strict 文件,但也适用于 HTML 的其他版本。功能<style>
标签和包含的 CSS 文件中获取数据,补全“class”和“id”属性的值CTRL-X
CTRL-O
会关闭最后一个打开的标签<script>
标签内部以及在事件属性的值中进行(包括外部文件的扫描)。IE FF W3C Omni completion ~ +/- +/- + + ~ + + - + ~ + - - - ~ - + - - ~
/* @var $myVar myClass */ $myVar->
CTRL-X
CTRL-O
提供的补全对上下文很敏感let g:rubycomplete_buffer_loading = 1<- 在上面的上下文 1 中,Vim 可以解析整个缓冲区,以将类列表添加到补全结果中。此功能默认情况下处于关闭状态,要启用它,请添加
let g:rubycomplete_classes_in_global = 1
let g:rubycomplete_rails = 1
setlocal omnifunc=syntaxcomplete#Complete您可以通过将以下内容放在您的 init.vim 中(在任何“:filetype”命令之后)来自动执行此操作
if has("autocmd") && exists("+omnifunc") autocmd Filetype * \ if &omnifunc == "" | \ setlocal omnifunc=syntaxcomplete#Complete | \ endif endif上面的命令将仅在特定插件不存在于该文件类型的情况下,将补全设置为该脚本。
syntax list您首先会注意到有很多不同的语法组。PHP 语言可以包含来自不同语言的元素,例如 HTML、JavaScript 等等。语法插件只会包含以文件类型“php”开头的语法组,在本例中。例如,这些语法组默认情况下包含在 PHP 中:phpEnvVar、phpIntVar、phpFunctions。
htmlArg,htmlTag,htmlTagName,javaScriptStatement,javaScriptGlobalObjects要拾取编辑 PHP 文件时的任何 JavaScript 和 HTML 关键字语法组,可以使用 3 个不同的正则表达式,每个语言一个。或者,您也可以简单地将包含组限制为特定值,而无需使用正则表达式字符串
let g:omni_syntax_group_include_php = 'php\w\+,javaScript\w\+,html\w\+' let g:omni_syntax_group_include_php = 'phpFunctions,phpMethods'
let g:omni_syntax_group_include_{filetype} = 'regex,comma,separated'PHP 语言有大量它知道如何语法高亮的项目。这些项目将在全能补全列表中可用。
let g:omni_syntax_group_exclude_php = 'phpCoreConstant,phpConstant' let g:omni_syntax_group_exclude_php = 'php\w*Constant'通过逗号分隔,将尽可能多的语法组添加到此列表中。此变量的基本形式为
let g:omni_syntax_group_exclude_{filetype} = 'regex,comma,separated'您可以根据需要创建尽可能多的这些变量,仅在变量名称末尾的 文件类型 方面有所不同。
let g:omni_syntax_use_iskeyword = 0对于插件开发者,该插件公开了公共函数 OmniSyntaxList。此函数可用于请求语法项列表。当编辑 SQL 文件(:e syntax.sql)时,可以使用“:syntax list”命令查看各种组和语法项。例如
syntax list生成类似于此的数据
echo OmniSyntaxList( [] )要仅检索 sqlOperator 语法组的语法项
echo OmniSyntaxList( ['sqlOperator'] )要检索 sqlOperator 和 sqlType 两个组的所有语法项
echo OmniSyntaxList( ['sqlOperator', 'sqlType'] )还可以使用正则表达式
echo OmniSyntaxList( ['sql\w\+'] )在插件中,您通常会将输出分配给列表
let myKeywords = [] let myKeywords = OmniSyntaxList( ['sqlKeyword'] )
CTRL-X
CTRL-O
会关闭最后一个打开的标签let g:xmldata_crippled = { \ "vimxmlentities": ["amp", "lt", "gt", "apos", "quot"], \ 'vimxmlroot': ['tag1'], \ 'tag1': \ [ ['childoftag1a', 'childoftag1b'], {'attroftag1a': [], \ 'attroftag1b': ['valueofattr1', 'valueofattr2']}], \ 'childoftag1a': \ [ [], {'attrofchild': ['attrofchild']}], \ 'childoftag1b': \ [ ['childoftag1a'], {'attrofchild': []}], \ "vimxmltaginfo": { \ 'tag1': ['Menu info', 'Long information visible in preview window']}, \ 'vimxmlattrinfo': { \ 'attrofchild': ['Menu info', 'Long information visible in preview window']}}此示例将放在“autoload/xml/crippled.vim”文件中,可以帮助编写此文件
<tag1 attroftag1b="valueofattr1"> <childoftag1a attrofchild> & < </childoftag1a> <childoftag1b attrofchild="5"> <childoftag1a> > ' " </childoftag1a> </childoftag1b> </tag1>在示例中,四个特殊元素可见
:XMLns xhtml10s :XMLns xsl xsl:XMLent
{name}
:XMLent:XMLent xhtml10s用法
<|将补全到适当的 XHTML 标签,在这种情况下
<xsl:|将补全到适当的 XSL 标签。
:echo xmlcomplete#GetLastOpenTag("b:unaryTagsStack")
<Esc>
退出插入模式。有关插入模式中的其他特殊字符,请参阅 mode-ins-repl。[count] 的效果在退出插入模式后生效。{range}
缺失,文本将在当前行之后插入。添加 [!] 会切换 'autoindent',在执行此命令时生效。{range}
缺失,文本将在当前行之前插入。添加 [!] 会切换 'autoindent',在执行此命令时生效。:a|one two . :visual将在光标行之后追加以下文本
one two
<Esc>
。可以在自动命令中使用,例如:au BufEnter scratch stopinsert
{cmd}
并将它的标准输出插入到光标下方或指定行下方。一个临时文件用于存储命令的输出,然后将输出读取到缓冲区中。 'shellredir' 用于保存命令的输出,可以设置为包含或不包含标准错误输出。{cmd}
的执行方式与 ":!{cmd}" 相同,任何 '!' 都将被替换为前一个命令 :!。请参阅 ++opt 以了解 [++opt] 的可能值。{name}
"。:read ++edit filename效果是 'fileformat'、'fileencoding'、'bomb' 等选项将被设置为 "filename" 检测到的值。注意会保留一个空行,您可能想要删除它。
<EOL>
样式<CR>
<NL>
或 <NL>
DOS 格式 "unix" <NL>
Unix 格式 "mac" <CR>
Mac 格式<EOL>
的类型(请参阅 file-formats)。但是,'fileformat' 选项不会改变,检测到的格式仅在读取文件时使用。'fileencodings' 也类似。:r !uuencode binfile binfile此命令读取 "binfile",对其进行 uuencode,并将结果读取到当前缓冲区中。当您编辑电子邮件并想要包含二进制文件时,这很有用。
{RO}
文件是写保护的 [fifo/socket] 使用流 [fifo] 使用 fifo 流 [socket] 使用套接字流 [CR missing] 使用 "dos" 'fileformat' 读取,发现没有前导 CR 的 NL。 [NL found] 使用 "mac" 'fileformat' 读取,发现 NL(可能是 "unix" 格式) [long lines split] 至少有一行被拆分为两行 [NOT converted] 从 'fileencoding' 到 'encoding' 的转换需要进行,但不可行 [converted] 从 'fileencoding' 到 'encoding' 的转换已完成 [READ ERRORS] 文件无法完全读取