Nvim :help
页面,生成 于 源代码,使用 tree-sitter-vimdoc 解析器。
<Insert>
键,可以在插入和覆盖字符之间切换。:cnoremap <C-A> <Home> :cnoremap <C-F> <Right> :cnoremap <C-B> <Left> :cnoremap <Esc>b <S-Left> :cnoremap <Esc>f <S-Right>(<> 符号 <>; 请逐字输入)
CTRL-V
通常映射到粘贴文本。在这种情况下,请改用 CTRL-Q
。 c_CTRL-QCTRL-V
相同。但在某些终端中,它用于控制流,在这种情况下它无法正常工作。CTRL-V
相同,但不要尝试将 CTRL 修饰符包含到键中。<Left>
光标左移。参见 'wildmenu' 以了解 wildmenu 完成模式下的行为。 c_<Right> c_Right <Right>
光标右移。参见 'wildmenu' 以了解 wildmenu 完成模式下的行为。 c_<S-Left><S-Left>
或 <C-Left>
c_<C-Left><S-Right>
或 <C-Right>
c_<C-Right><Home>
c_CTRL-B c_<Home> c_Home 光标移动到命令行开头 CTRL-E 或 <End>
c_CTRL-E c_<End> c_End 光标移动到命令行末尾。参见 'wildmenu' 以了解 wildmenu 完成模式下的行为。<BS>
删除光标前面的字符。 c_<Del> c_Del <Del>
删除光标下的字符(在行尾:光标前的字符)。 c_CTRL-W:cnoremap <C-U> <C-E><C-U>
{char1}
<BS>
{char2}
或 c_digraph{char1}
{char2}
c_CTRL-K{char1}
是一个特殊键时,该键的代码将以 <> 形式插入。{register}
c_CTRL-R c_<C-R> 插入编号或命名寄存器的内容。在键入 CTRL-R
和第二个字符之间,会显示 '"',表示您需要输入寄存器的名称。文本以您键入的方式插入,但不会使用映射和缩写。但是,不会通过 'wildchar' 触发命令行自动完成。并且结束命令行的字符将按字面意义插入 (<Esc>
, <CR>
, <NL>
, <C-C>
)。但是,<BS>
或 CTRL-W 仍然可以结束命令行,并且其余字符将在另一种模式下解释,这可能不是您想要的结果。特殊寄存器: '"' 无名寄存器,包含最后一次删除或粘贴的文本 '%' 当前文件名 '#' 备用文件名 "*" 剪贴板内容(X11:主选择区) '+' 剪贴板内容 '/' 最后一次搜索模式 ':' 最后一次命令行 '-' 最后一次小(小于一行)删除 '.' 最后一次插入的文本 c_CTRL-R_=<C-R><C-R>=setcmdpos(2)[-1]<CR>
CTRL-F
c_CTRL-R_CTRL-F c_<C-R>_<C-F> CTRL-R CTRL-P
c_CTRL-R_CTRL-P c_<C-R>_<C-P> CTRL-R CTRL-W
c_CTRL-R_CTRL-W c_<C-R>_<C-W> CTRL-R CTRL-A
c_CTRL-R_CTRL-A c_<C-R>_<C-A> CTRL-R CTRL-L
c_CTRL-R_CTRL-L c_<C-R>_<C-L> 插入光标下的对象: CTRL-F
光标下的文件名 CTRL-P
光标下的文件名,用 'path' 展开,如 gf 中 CTRL-W
光标下的单词 CTRL-A
光标下的 WORD;参见 WORD CTRL-L
光标下的行CTRL-W
,已经键入的单词部分不会再次插入。CTRL-R
{register CTRL-F CTRL-P CTRL-W CTRL-A CTRL-L}
CTRL-R CTRL-O
{register CTRL-F CTRL-P CTRL-W CTRL-A CTRL-L}
插入寄存器或光标下的对象。工作方式类似于 c_CTRL-R,但按字面意义插入文本。例如,如果寄存器 a 包含 "xy^Hz"(其中 ^H 是退格键),"CTRL-R a" 会插入 "xz",而 "CTRL-R CTRL-R
a" 会插入 "xy^Hz"。CTRL-\
e {expr}
c_CTRL-\_e{expr}
并用结果替换整个命令行。系统会提示您输入表达式,键入 <Enter>
以完成输入。这在映射中最为有用。参见 表达式。参见 c_CTRL-R_= 了解有关插入表达式结果的信息。有用的函数是 getcmdtype(),getcmdline() 和 getcmdpos()。光标位置保持不变,除非光标位于行尾,则光标保持在行尾。setcmdpos() 可用于设置光标位置。沙盒 用于计算表达式以避免恶意的副作用。示例:cmap <F7> <C-\>eAppendSome()<CR> :func AppendSome() :let cmd = getcmdline() .. " Some()" :" place the cursor on the ) :call setcmdpos(strlen(cmd)) :return cmd :endfunc
CTRL-[
c_CTRL-[ c_<Esc> c_Esc <Esc>
当输入且 'x' 不存在于 'cpoptions' 中时,退出命令行模式而不执行。在宏中或当 'x' 存在于 'cpoptions' 中时,开始输入的命令。 注意: 如果您的 <Esc>
键在键盘上很难按,请训练自己使用 CTRL-[
。 c_META c_ALT ALT (META) 可能会像 <Esc>
一样起作用,如果和弦没有映射。例如,如果 <A-x>
没有命令行模式映射,则 <A-x>
像 <Esc>
x 一样起作用。 c_CTRL-C<Up>
从历史记录中调用较旧的命令行,其开头与当前命令行匹配(见下文)。请参阅 'wildmenu' 以了解在 wildmenu 完成模式下的行为。 c_<Down> c_Down <Down>
从历史记录中调用更新的命令行,其开头与当前命令行匹配(见下文)。请参阅 'wildmenu' 以了解在 wildmenu 完成模式下的行为。<S-Up>
或 <PageUp>
从历史记录中调用较旧的命令行 c_<S-Down> c_<PageDown> <S-Down>
或 <PageDown>
从历史记录中调用更新的命令行CTRL-^
切换使用语言 :lmap 映射和/或输入法。当为搜索命令键入模式时,如果 'imsearch' 不为 -1,则 VAL 为 'imsearch' 的值,否则 VAL 为 'iminsert' 的值。当定义了语言映射时CTRL-^
打开它之后,新状态不会在下一个命令或搜索模式中再次使用。<Up>
和 <Down>
键将当前命令行作为搜索字符串。下一个/上一个命令行的开头将与此字符串进行比较。第一个匹配的行是新的命令行。当重复键入这两个键时,将再次使用相同的字符串。例如,这可以用来查找上一个替换命令:键入 ":s",然后键入 <Up>
。可以通过多次键入 <S-Up>
来完成同样的事情,直到显示所需的命令行。(注意: 这些箭头键在所有终端上都不起作用){name}
] [{first}
][, [{last}
]] 列出历史记录 {name}
的内容,它可以是:c[md] 或 : 命令行历史记录 s[earch] 或 / 或 ? 搜索字符串历史记录 e[xpr] 或 = 表达式寄存器历史记录 i[nput] 或 @ 输入行历史记录 d[ebug] 或 > 调试命令历史记录 a[ll] 以上所有{first}
和/或 {last}
,则会列出历史记录中相应范围内的条目。这些数字可以使用以下形式指定: :history-indexing:history / 6,12
:history all -2
:history all -2,:keepp[atterns]
{command}
:keepp :keeppatterns 执行 {command}
,而不向搜索历史记录中添加任何内容,并且在 :s 或 :& 的情况下,不会修改最后一个替换模式或替换字符串。<Tab>
或 <Esc>
主要用作 'wildchar',并且它们在某些宏中具有特殊含义。)当再次键入时,如果有多个匹配项,则插入下一个匹配项。在最后一个匹配项之后,将再次使用第一个匹配项(循环)。可以使用 'wildmode' 选项更改行为。 c_<S-Tab><S-Tab>
与 'wildchar' 或 <Tab>
相同,但从最后一个匹配项开始,然后转到上一个匹配项。 c_CTRL-NCTRL-L
将从当前匹配项的末尾添加一个字符。如果设置了 'ignorecase' 和 'smartcase' 并且命令行没有大写字符,则添加的字符将转换为小写。 c_CTRL-G /_CTRL-G CTRL-G 当 'incsearch' 设置时,输入 "/" 或 "?" 的搜索模式并显示当前匹配项,则 CTRL-G
将移动到下一个匹配项(不考虑 search-offset)。使用 CTRL-T
移动到上一个匹配项。提示:在标准键盘上,T 在 G 的上方。 c_CTRL-T /_CTRL-T CTRL-T 当 'incsearch' 设置时,输入 "/" 或 "?" 的搜索模式并显示当前匹配项,则 CTRL-T
将移动到上一个匹配项(不考虑 search-offset)。使用 CTRL-G
移动到下一个匹配项。提示:在标准键盘上,T 在 G 的上方。:cnoremap X <C-L><C-D>(其中 X 是要使用的命令键,
<C-L>
是 CTRL-L
,<C-D>
是 CTRL-D
) 这将找到最长的匹配项,然后列出所有匹配的文件。:set wildmode=longest,list这将找到第一个 'wildchar' 的最长匹配项,然后列出所有与下一个匹配的文件。
CTRL-N
或 CTRL-P
来获取其他匹配项。所有文件都包含在内,包括扩展名与 'suffixes' 选项匹配的文件。:e *.c$这将不匹配以 ".cpp" 结尾的文件。如果没有 "$",它确实匹配。
<S-Tab>
来代替 CTRL-P
,请在您的 .cshrc 中放入此命令xmodmap -e "keysym Tab = Tab Find"并在您的 vimrc 中放入此命令
:cmap <Esc>[1~ <C-P>
:set ai "set 'autoindent' option无法向 shell 命令 ":!cmd" 或 ":map" 命令以及其他一些命令(主要是期望表达式的命令)添加注释,这些命令将 '"' 视为其参数的一部分
:execute 'r !ls' | '[有一个例外:当 'cpoptions' 中存在 'b' 标志时,对于 ":map" 和 ":abbr" 命令及其相关命令,需要使用
CTRL-V
而不是 '\'。您也可以使用 "<Bar>" 代替。另请参阅 map_bar。:!ls | wc view the output of two commands :r !ls | wc insert the same output in the text :%g/foo/p|> moves all matching lines one shiftwidth :%s/foo/bar/|> moves one line one shiftwidth :map q 10^V| map "q" to "10|" :map q 10\| map \ l map "q" to "10\" and map "\" to "l" (when 'b' is present in 'cpoptions')您也可以使用
<NL>
来分隔命令,就像使用 '|' 一样。要插入 <NL>
,请使用 CTRL-V
CTRL-J
。将显示 "^@"。使用 '|' 是首选方法。但是对于外部命令,必须使用 <NL>
,因为 '|' 包含在外部命令中。要避免 <NL>
的特殊含义,它必须以反斜杠开头。示例:r !date<NL>-join这将当前日期读入文件,并将其与上一行合并。
:| print current line (like ":p") :3| print line 3 (like ":3p") :3 goto line 3在范围和命令名称之间允许使用冒号。它将被忽略(这与 Vi 兼容)。例如
:1,$:s/pat/string当在期望文件名的位置使用字符 '%' 或 '#' 时,它们将扩展为当前文件和备用文件名(请参阅“编辑文件”一章 :_% :_#)。
CTRL-V
转义。请注意,":next" 命令使用空格来分隔文件名。转义空格以将其包含在文件名中。示例:next foo\ bar goes\ to school\开始编辑三个文件 "foo bar"、"goes to" 和 "school "。
5;/that line/
{number}
绝对行号 E1247 . 当前行 :.{pattern}
匹配的下一行 :/{pattern}
匹配的上一行 :? 另请参阅下面的 :range-pattern \/ 之前使用的搜索模式匹配的下一行 \? 之前使用的搜索模式匹配的上一行 \& 之前使用的替换模式匹配的下一行:3,4+2print在以下文本中
:2,4-1print在以下文本中
/pat1//pat2/ Find line containing "pat2" after line containing "pat1", without moving the cursor. 7;/pat2/ Find line containing "pat2", after line 7, leaving the cursor in line 7.
{number}
必须在 0 到文件中行数之间。当使用 0(零)时,大多数命令将其解释为 1。将其用作计数的命令确实将其用作零 (:tag, :pop 等)。一些命令将零解释为“第一行之前”(:read,搜索模式等)。.+3 three lines below the cursor /that/+1 the line below the next line containing "that" .,$ from current line until end of file 0;/that the first line containing "that", also matches in the first line. 1;/that the first line after line 1 containing "that"一些命令允许在命令后添加计数。此计数用作要使用的行数,从最后一个行指定器中给定的行开始(默认值为光标行)。接受计数的命令是那些使用范围但没有文件名参数的命令(因为文件名也可以是数字)。计数不能为负数。
:s/x/X/g 5 substitute 'x' by 'X' in the current line and four following lines :23d 4 delete lines 23, 24, 25 and 26折叠和范围
:.,.+(count - 1)换句话说:光标处及之后“计数”行。示例:要删除三行
3:d<CR> is translated into: .,.+2d<CR>
:!ls "%" :r !spell "%"要避免“%”和“#”的特殊含义,在其前面插入一个反斜杠。详情:无论有多少个反斜杠,只要前面有一个反斜杠,特殊含义就会始终被转义。
<cword>
被替换为光标下的单词(类似于 star) :<cWORD> <cWORD> <cWORD>
被替换为光标下的 WORD(参见 WORD) :<cexpr> <cexpr> <cexpr>
被替换为光标下的单词,包括更多内容以形成 C 表达式。例如,当光标位于“ptr->arg”的“arg”上时,结果为“ptr->arg”;当光标位于“list[idx]”的“]”上时,结果为“list[idx]”。 :<cfile> <cfile> <cfile>
被替换为光标下的路径名(类似于 gf 使用的方式) :<afile> <afile> <afile>
在执行自动命令时,被替换为正在操作的缓冲区的文件名,或读写操作的文件。 E495 :<abuf> <abuf> <abuf>
在执行自动命令时,被替换为当前有效的缓冲区号。它并非针对所有事件设置,另请参见 bufnr()。对于“:r 文件”和“:so 文件”,它是当前缓冲区,正在读取/源的文件不在缓冲区中。 E496 :<amatch> <amatch> <amatch>
在执行自动命令时,被替换为执行此自动命令的匹配项。 E497 当文件名不用于匹配时(对于 FileType、Syntax 和 SpellFileMissing 事件),它与 <afile>
不同。当与文件名匹配时,它会扩展到完整路径。 :<sfile> <sfile> <sfile>
在执行 :source
命令时,被替换为源文件的文件名。 E498 在执行函数时,被替换为调用栈,与 <stack>
相同(这是为了向后兼容,建议使用 <stack>
或 <script>
)。请注意,当 <sfile>
不在脚本内部使用时,文件名修饰符毫无用处。 :<stack> <stack> <stack>
被替换为调用栈,对于函数行使用“函数 {function-name}
[{lnum}
]”,对于脚本行使用“脚本 {file-name}
[{lnum}
]”,并在项目之间使用“..”。例如:“函数 {function-name1}
[{lnum}
]..{function-name2}[{lnum}
]”如果没有调用栈,您会收到错误 E489 。 :<script> <script> <script>
在执行 :source
命令时,被替换为源文件的文件名。在执行函数时,被替换为定义该函数的脚本的文件名。如果无法确定文件名,您会收到错误 E1274 。 :<slnum> <slnum> <slnum>
在执行 :source
命令时,被替换为行号。 E842 在执行函数时,它是相对于函数开头的行号。 :<sflnum> <sflnum> <sflnum>
在执行脚本时,被替换为行号。它与 <slnum>
的区别在于,在任何情况下,<sflnum>
都被替换为脚本行号。 E961:!dir <cfile>:S :call system('chmod +w -- ' . expand('%:S'))例子,当文件名是 "src/version.c",当前目录是 "/home/mool/vim"
:p /home/mool/vim/src/version.c :p:. src/version.c :p:~ ~/vim/src/version.c :h src :p:h /home/mool/vim/src :p:h:h /home/mool/vim :t version.c :p:t version.c :r src/version :p:r /home/mool/vim/src/version :t:r version :e c :s?version?main? src/main.c :s?version?main?:p /home/mool/vim/src/main.c :p:gs?/?\\? \home\mool\vim\src\version.c例子,当文件名是 "src/version.c.gz"
:p /home/mool/vim/src/version.c.gz :e gz :e:e c.gz :e:e:e c.gz :e:e:r c :r src/version.c :r:e c :r:r src/version :r:r:r src/version
% current file name %< current file name without extension # alternate file name for current window #< idem, without extension #31 alternate file number 31 #31< idem, without extension <cword> word under the cursor <cWORD> WORD under the cursor (see |WORD|) <cfile> path name under the cursor <cfile>< idem, without extension注意: 在需要文件名的位置,将进行通配符扩展。在 Unix 上,将使用 shell 进行此操作,除非可以在内部进行(为了速度)。反引号也能工作,例如
:n `echo *.c`但是,只有在扩展 "%"、"#" 等之前存在通配符时,才会进行扩展。这样可以避免扩展文件名内的通配符。如果你想扩展
<cfile>
的结果,请向其添加通配符。例子:(备用文件名是 "?readme?")命令扩展为:e # :e ?readme? :e `ls #` :e {files matching "?readme?"} :e #.* :e {files matching "?readme?.*"} :cd <cfile> :cd {file name under cursor} :cd <cfile>* :cd {file name under cursor plus "*" and then expanded}另见 `=.
<CR>
执行光标下的命令行。在插入模式和普通模式中都可以使用。 CTRL-C 在命令行模式下继续。光标下的命令行将用作命令行。在插入模式和普通模式中都可以使用。不会重新绘制,因此窗口将保持可见。 :quit 丢弃命令行并返回普通模式。":close"、CTRL-W
c、":exit"、":xit" 和 CTRL-\
CTRL-N
也能工作。 :qall 退出 Vim,除非某些缓冲区中存在更改。 :qall! 退出 Vim,丢弃对任何缓冲区的更改。<CR>
执行的那一行以外,对其他行的任何更改都将丢失。:autocmd CmdwinEnter * map <buffer> <F5> <CR>q:
<Tab>
,并且命令行窗口用于 Ex 命令,那么将添加两个映射,以便在命令行窗口中使用 <Tab>
进行补全,如下所示:inoremap <buffer> <Tab> <C-X><C-V> :nnoremap <buffer> <Tab> a<C-X><C-V>请注意,在普通模式下按
<Tab>
会对下一个字符进行补全。这样,它就可以在行尾起作用。如果你不想要这些映射,请使用以下命令禁用它们au CmdwinEnter [:>] iunmap <buffer> <Tab> au CmdwinEnter [:>] nunmap <buffer> <Tab>你可以将这些行放在你的 vimrc 文件中。
autocmd CmdWinEnter [:>] syntax sync minlines=1 maxlines=1
:au CmdwinEnter : let b:cpt_save = &cpt | set cpt=. :au CmdwinLeave : let &cpt = b:cpt_save这将设置 'complete' 以便为 i_CTRL-N 使用当前窗口中的补全。另一个例子
:au CmdwinEnter [/?] startinsert这将使 Vim 在命令行窗口中以插入模式启动。
-
文本,用于 :insert 或 :append