各种

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


各种命令

1. 各种命令 various-cmds

CTRL-L
CTRL-L 清除并重绘屏幕。重绘可能稍后发生,在处理预读后。另请参见 nvim__redraw()CTRL-L-default
默认情况下,还会清除搜索高亮显示 :nohlsearch 并更新差异 :diffupdatedefault-mappings
:mod :mode :mod[e] 清除并重绘屏幕。另请参见 nvim__redraw()
:redr :redraw :redr[aw][!] 现在重绘挂起的屏幕更新,或者如果包含 "!" 则重绘整个屏幕。要清除屏幕,请使用 :modeCTRL-L。它可用于在脚本或函数中重绘屏幕(或如果设置了 'lazyredraw' 则映射)。另请参见 nvim__redraw()
:redraws :redrawstatus :redraws[tatus][!] 重绘当前窗口的状态行和窗口栏,或者如果包含 "!" 则重绘所有状态行和窗口栏。如果包含 'ruler',则改为重绘命令行。如果 'statusline''winbar' 包含不触发自动更新的项目,则很有用。另请参见 nvim__redraw()
:redrawt :redrawtabline :redrawt[abline] 重绘选项卡栏。如果 'tabline' 包含不触发自动更新的项目,则很有用。另请参见 nvim__redraw()
N<Del>
<Del> 在输入数字时:删除最后一个数字。 注意: 如果您想使用 <BS> 来执行此操作,请将此映射添加到您的 vimrc 中
:map CTRL-V <BS>   CTRL-V <Del>
:as[cii] 或 ga :as :ascii ga 以十进制、十六进制和八进制形式打印光标下字符的 ASCII 值。助记符:获取 ASCII 值。
例如,当光标位于“R”上时
<R> 82, Hex 52, Octal 122
当字符是非标准 ASCII 字符,但根据 'isprint' 选项可打印时,还会给出不可打印版本。
当字符大于 127 时,也会打印 <M-x> 形式。例如
<~A> <M-^A> 129, Hex 81, Octal 201
<p> <|~> <M-~> 254, Hex fe, Octal 376
(其中 <p> 是一个特殊字符)
文件中 <Nul> 字符在内部存储为 <NL>,但会显示为
<^@> 0, Hex 00, Octal 000
如果字符具有组合字符,也会显示这些字符。 'maxcombine' 的值无关紧要。
如果可以作为双字符插入字符,也会输出可用于创建字符的两个字符
<ö> 246, Hex 00f6, Oct 366, Digr o
这表明您可以键入 CTRL-K o : 以插入 ö。
g8
g8 打印光标下字符中使用的字节的十六进制值,假设它采用 UTF-8 编码。这也显示组合字符。 'maxcombine' 的值无关紧要。具有两个组合字符的字符示例
e0 b8 81 + e0 b8 b9 + e0 b9 89
8g8
8g8 在光标处或光标之后查找非法的 UTF-8 字节序列。当编辑假设为 UTF-8 但被读为 8 位编码的文件时,可以使用它,因为它包含非法字节。不会绕过文件末尾。请注意,当光标位于非法字节上或光标位于多字节字符的中间时,命令不会移动光标。
gx
gx 使用系统默认处理程序打开光标处的当前文件路径或 URL(由 <cfile>'isfname' 决定),通过调用 vim.ui.open()
v_gx
{Visual}gx 使用系统默认处理程序打开选定文本,通过调用 vim.ui.open()
:p :pr :print E749 :[range]p[rint] [flags] 打印 [range] 行(默认当前行)。在 GUI 中,您可以使用“文件。打印”菜单项。有关 [flags],请参见 ex-flags:filter 命令可用于仅显示与模式匹配的行。
:[range]p[rint] {count} [flags] 打印 {count} 行,从 [range] 开始(默认当前行 cmdline-ranges)。有关 [flags],请参见 ex-flags
:l :list :[range]l[ist] [count] [flags] 与 :print 相同,但默认情况下将制表符显示为“>”,尾随空格显示为“-”,不可分割空格字符显示为“+”。 'listchars' 选项会进一步改变它。有关 [flags],请参见 ex-flags
:nu :number :[range]nu[mber] [count] [flags] 与 :print 相同,但在每行之前加上行号。(另请参见 hl-LineNr'numberwidth')。有关 [flags],请参见 ex-flags
:#
:[range]# [count] [flags] 是 :number 的同义词。
:#! vim-shebang :#!{anything} 被忽略,因此您可以使用以下命令启动 Vim 脚本
#!vim -S
let mylogbook='$HOME/logbook.md'
exe $':e {mylogbook}'
$
put ='## ' .. strftime('%d. %b %Y')
norm! o
使该脚本可执行并运行它以创建新的日记条目。
:z E144 :[range]z[+-^.=][count] 显示围绕用 [range] 指定的行或当前行(如果不存在 [range])的几行文本。
如果存在 [count],则表示您将看到多少行;如果不存在 [count] 并且只有一个窗口,则使用 'scroll' 选项值的兩倍,否则使用当前窗口高度减 3。这是下表中的“scr”值。
如果存在 [count],则 'window' 选项将设置为其值。
:z 可以单独使用,也可以后跟几个标记中的任何一个。这些具有以下效果
标记 第一行 最后一行 新光标行
---- ---------- --------- ------------ + 当前行 1 scr 向前 1 scr 向前
1 scr 向后 当前行 当前行 ^ 2 scr 向后 1 scr 向后 1 scr 向后 . 1/2 scr 向后 1/2 scr 向前 1/2 scr 向前 = 1/2 scr 向后 1/2 scr 向前 当前行
不指定任何标记与“+”相同。如果标记是“=”,则会在当前行周围打印一行破折号。
:z!
:[range]z![+-^.=][count] 与 ":z" 相同,但当未指定 [count] 时,其默认值为 Vim 窗口高度减 1。
:[range]z[!]#[+-^.=][count] :z#
与 ":z" 或 ":z!" 相同,但对行进行编号。
:=
:= [args] 无 [args]:打印最后一行号。有 [args]:等效于 :lua ={expr}。参见 :lua
:{range}= 打印 {range} 中的最后一行号。例如,这将打印当前行号
:.=
:norm[al][!] {commands} :norm :normal 执行普通模式命令 {commands}。这使得执行在命令行中键入的普通模式命令成为可能。 {commands} 像键入一样执行。对于撤消,所有命令都会一起撤消。遇到错误时,执行将停止。
如果给出 [!],则不会使用映射。如果没有它,当从不可重新映射的映射 (:noremap) 调用此命令时,参数无论如何都可以被映射。
{commands} 应是一个完整的命令。如果 {commands} 未完成命令,则最后一个命令将被中止,就像键入了 <Esc><C-C> 一样。这意味着插入命令必须完成(要启动插入模式,请参见 :startinsert)。冒号命令也必须完成。您不能使用“gQ”启动 Ex 模式。
在 ":normal" 忙时,显示不会更新。
{commands} 不能以空格开头。在它之前放一个计数为 1(一个),“1 ”是一个空格。
此命令不能后跟另一个命令,因为任何“|”都被视为命令的一部分。
此命令可以递归使用,但深度受 'maxmapdepth' 限制。
另一个选择是使用 :execute,它使用表达式作为参数。这允许使用可打印字符来表示特殊字符。
示例
:exe "normal \<c-w>\<c-w>"
:{range}norm[al][!] {commands} :normal-range
{range} 中的每一行执行普通模式命令 {commands}。在执行 {commands} 之前,光标将定位在每一行的第一列中。否则,它与没有范围的 ":normal" 命令相同。
:sh :shell E371 E360 :sh[ell] 已移除。 vim-differences
:terminal :te :te[rminal][!] [{cmd}] 在新的 终端模拟器 缓冲区中,在非交互式 'shell' 中运行 {cmd}。如果没有 {cmd},则启动交互式 'shell'
键入 i 以进入 终端模式,然后将键发送到终端中运行的作业。键入 <C-\><C-N> 退出终端模式。 CTRL-\_CTRL-N。键入 <C-\><C-O> 执行单个普通模式命令 t_CTRL-\_CTRL-O
如果对当前缓冲区进行了更改,则会失败,除非设置了 'hidden'
如果省略了 {cmd},并且 'shell' 作业在没有错误的情况下退出,则缓冲区会自动关闭 default-autocmds
要自动进入 终端模式
autocmd TermOpen * startinsert
:!cmd :! :!{cmd} 使用 'shell' 执行 {cmd}。另请参见 :terminal
该命令在连接到管道(而不是终端)的非交互式 shell 中运行。使用 :terminal 运行连接到终端的交互式 shell。
后台(“&”)命令不能写入 stdout 或 stderr,流会立即关闭。 E5677 请改用 jobstart()
:call jobstart('foo', {'detach':1})
对于 powershell,对字符串化可执行路径进行链接需要使用调用运算符(&)。
:!Write-Output "1`n2" | & "C:\Windows\System32\sort.exe" /r
E34
{cmd}中,任何“!”都会被替换为上一个外部命令(参见 'cpoptions'),除非它被反斜杠转义。例如:":!ls" 之后跟 ":!echo ! \! \\!" 会执行 "echo ls ! \!"。
{cmd}中,任何“|”都会传递给 shell,你不能用它来追加 Vim 命令。参见 :bar
{cmd}中,任何“%”都会扩展为当前文件名。任何“#”都会扩展为备用文件名。特殊字符不会被转义,请使用引号或 shellescape()
:!ls "%"
:exe "!ls " .. shellescape(expand("%"))
换行符会结束{cmd},除非换行符之前有反斜杠。之后的内容会被解释为另一个 : 命令。
命令执行后,会检查当前文件的最后修改时间和大小 timestamp
如果命令产生太多输出,可能会跳过一些行,以便命令快速执行。不会丢失数据,这只会影响显示。最后几行总是会显示(永远不会跳过)。
要避免按下回车键提示,请使用
:silent !{cmd}
:!!
:!! 重复上次 ":!{cmd}"。
:ve :ver :version :ve[rsion] 打印编辑器版本和构建信息。另请参见 feature-compile
:redi :redir :redi[r][!] > {file} 将消息重定向到文件 {file}。命令输出的消息会被写入该文件,直到重定向结束。消息也会继续显示在屏幕上。如果包含 [!],则会覆盖现有文件。如果省略 [!] 并且 {file} 存在,则此命令会失败。
一次只能有一个 ":redir" 处于活动状态。调用 ":redir" 会在开始重定向到新目标之前关闭任何活动的重定向。有关递归使用,请查看 execute()
要阻止消息和命令回显到屏幕上,请将命令放在函数中,并使用 ":silent call Function()" 调用它。备选方案是 'verbosefile' 选项或 execute() 函数,这些可以与 ":redir" 结合使用。
:redi[r] >> {file} 将消息重定向到文件 {file}。如果 {file} 已经存在,则追加。
:redi[r] @{a-zA-Z} :redi[r] @{a-zA-Z}> 将消息重定向到寄存器 {a-z}。如果寄存器名称为大写 {A-Z},则追加到寄存器的内容。寄存器名称后面的 ">" 可选。:redi[r] @{a-z}>> 将消息追加到寄存器 {a-z}
:redi[r] @*> :redi[r] @+> 将消息重定向到选择或剪贴板。为了向后兼容,可以省略寄存器名称后面的 ">"。参见 quotestarquoteplus。:redi[r] @*>> :redi[r] @+>> 将消息追加到选择或剪贴板。
:redi[r] @"> 将消息重定向到无名寄存器。为了向后兼容,可以省略寄存器名称后面的 ">"。:redi[r] @">> 将消息追加到无名寄存器。
:redi[r] => {var} 将消息重定向到变量。如果变量不存在,则会创建它。如果变量存在,则会将其初始化为空字符串。变量会保持为空,直到重定向结束。只能使用字符串变量。重定向开始后,如果变量被删除或锁定,或者变量类型被更改,则进一步的命令输出消息会导致错误。当使用局部变量(函数中的 l:var 或脚本中的 s:var)并且另一个 :redir 导致当前 :redir 结束时,作用域可能不同,导致赋值失败。要获取一个命令的输出,可以使用 execute() 函数而不是重定向。
:redi[r] =>> {var} 将消息追加到现有变量。只能使用字符串变量。
:redi[r] END 结束消息重定向。
:filt :filter :filt[er][!] {pattern} {command} :filt[er][!] /{pattern}/ {command}{command} 的输出限制为与 {pattern} 匹配的行。例如,要列出只有 xml 文件
:filter /\.xml$/ oldfiles
如果给出了 [!],则将 {command} 的输出限制为与 {pattern} 不匹配的行。
{pattern} 是一个 Vim 搜索模式。除了用 / 括起来之外,还可以使用任何非标识符字符(参见 'isident'),只要它没有出现在 {pattern} 中即可。如果不用括号括起来,则模式不能包含竖线字符。不会使用 'ignorecase'
模式与输出的相应部分匹配,不一定与整行匹配。只有某些命令支持过滤,请尝试一下以查看是否有效。一些支持过滤的命令: :# - 过滤整行 :clist - 按文件名或模块名过滤 :command - 按命令名过滤 :files - 按文件名过滤 :highlight - 按高亮组过滤 :history - 按历史命令过滤 :jumps - 按文件名过滤 :let - 按变量名过滤 :list - 过滤整行 :llist - 按文件名或模块名过滤 :marks - 按当前文件中的文本过滤,或按其他文件的文件名过滤 :oldfiles - 按文件名过滤 :registers - 按寄存器内容过滤(不适用于多行) :set - 按选项名过滤
只过滤普通消息,不过滤错误消息。
:sil :silent :silent! :sil[ent][!] {command} 静默执行 {command}。不会显示普通消息,也不会将其添加到消息历史记录中。如果添加了 [!],则错误消息也会被跳过,并且在检测到错误时,命令和映射不会被中止。 v:errmsg 仍然会被设置。如果未使用 [!],则错误消息会导致进一步的消息正常显示。使用 :redir 启动的重定向会像往常一样继续,尽管可能存在细微差异。这将允许重定向命令的输出,而不会在屏幕上看到它。示例
:redir >/tmp/foobar
:silent g/Aap/p
:redir END
要静默执行 Normal 模式命令,请使用 :normal 命令。例如,要在没有消息的情况下搜索字符串
:silent exe "normal /path\<CR>"
":silent!" 用于执行可能失败的命令,但要忽略失败。示例
:let v:errmsg = ""
:silent! /^begin
:if v:errmsg != ""
: ... pattern was not found
":silent" 还会跳过按下回车键提示。提示用户输入的对话框(confirm()'swapfile' 等)永远不会静默。
:uns :unsilent :uns[ilent] {command} 非静默执行 {command}。只有当使用 :silent 进入此命令时才会有区别。当使用 :silent 时,请使用此命令来显示消息。在此示例中,使用 :silent 来避免读取文件的提示,并使用 :unsilent 来列出每个文件的首行。
:silent argdo unsilent echo expand('%') .. ": " .. getline(1)
:verb :verbose :[count]verb[ose] {command} 使用 'verbose' 设置为 [count] 来执行 {command}。如果省略 [count],则使用 1。":0verbose" 可用于将 'verbose' 设置为 0。额外使用 ":silent" 会生成消息但不显示它们。":silent" 和 ":verbose" 的组合可以用于生成消息,并使用 v:statusmsg 等检查它们。例如
:let v:statusmsg = ""
:silent verbose runtime foobar.vim
:if v:statusmsg != ""
:  " foobar.vim could not be found
:endif
当连接另一个命令时,":verbose" 仅适用于第一个命令
:4verbose set verbose | set verbose
verbose=4
verbose=0
要将详细消息记录到文件中,请使用 'verbosefile' 选项。
:verbose-cmd
'verbose' 非零时,列出 Vim 选项或键映射或缩写或用户定义函数或命令或高亮组或自动命令的值时,还会显示它上次定义的位置。如果它们是在 Lua 中定义的,则只有在 'verbose' 设置后才能找到它们。因此,使用 -V1 参数启动 nvim 以查看它们。如果它是手动定义的,则不会显示 "Last set" 消息。如果它是在执行函数、用户命令或自动命令时定义的,则会报告定义它的脚本。
K
[count]K 运行由 'keywordprg' 给出的程序来查找光标下或光标右侧的 单词(由 'iskeyword' 定义)。默认值为 "man"。工作原理如下
:tabnew | terminal {program} {keyword}
特殊情况
如果 'keywordprg' 以 “:” 开头,则会使用 [count] 作为 Vim 命令调用它。
如果 'keywordprg' 为空,则使用 :help
'keywordprg' 等于 "man" 时,"K" 之前的 [count] 会插入到 "man" 命令之后和关键字之前。例如,当光标位于 "mkdir" 上时,使用 "2K" 会导致
!man 2 mkdir
'keywordprg' 等于 "man -s" 时,"K" 之前的 [count] 会插入到 "-s" 之后。如果没有计数,则会删除 "-s"。 K-lsp-default
Nvim LSP 客户端将 K 设置为显示 LSP "hover" 功能。 lsp-defaults
v_K
{Visual}K 与 "K" 相似,但使用视觉突出显示的文本作为关键字。只有在突出显示的文本不超过一行时才有效。
gO
gO 显示当前缓冲区的特定于文件类型的、可导航的 "大纲"。例如,在 help 缓冲区中,这将显示目录。
目前在 help:Man 缓冲区中有效。
[N]gs gs :sl :sleep :[N]sl[eep] [N][m] 不做任何操作 [N] 秒,如果给出了 [m],则不做任何操作 [N] 毫秒。 "gs" 始终使用秒。默认值为 1 秒。
:sleep             "sleep for one second
:5sleep             "sleep for five seconds
:sleep 100m     "sleep for 100 milliseconds
10gs             "sleep for ten seconds
可以使用 CTRL-C 中断。 "gs" 代表 "goto sleep"。睡眠期间,光标会停留在文本中,如果它在可见位置,则会停留在文本中。排队的消息会在睡眠期间处理。
:sl! :sleep! :[N]sl[eep]! [N][m] 与上面相同。与 Vim 不同,它不会隐藏光标。 vim-differences

2. 使用 Vim 类似 less 或 more less

如果您使用 less 或 more 程序查看文件,则不会获得语法高亮。因此,您可能希望使用 Vim 代替。您可以使用 shell 脚本 "$VIMRUNTIME/scripts/less.sh" 来完成此操作。
此 shell 脚本使用 Vim 脚本 "$VIMRUNTIME/scripts/less.vim"。它设置了映射,以模拟 less 支持的命令。否则,您仍然可以使用 Vim 命令。
这并不完美。例如,当查看短文件时,Vim 仍然会使用整个屏幕。但它对于大多数用途来说已经足够好了,而且您可以获得语法高亮。
"h" 键会为您提供可用命令的简短概述。
如果你想要在使用 less 时设置不同的选项,请在你的 vimrc 中定义 LessInitFunc,例如
func LessInitFunc()
  set nocursorcolumn nocursorline
endfunc

3. 注释 注释

Nvim 支持根据 'commentstring' 对行进行注释和取消注释。
对单行操作的行为如下
如果该行与 'commentstring' 匹配,则会删除注释标记(例如,/*foo*/ 将转换为 foo)。
否则,将在当前行添加注释标记(例如,foo 将转换为 /*foo*/)。空行将被忽略。
对多行操作的行为如下
如果每个受影响的非空行与 'commentstring' 匹配,则所有注释标记都将被删除。
否则,所有受影响的行都将被转换为注释;空行将被转换为空注释(例如,/**/)。注释标记将对齐到缩进最小的行。
匹配 'commentstring' 不会考虑注释标记中的空格。首先尝试精确删除注释标记,如果失败,则会尝试使用从空格中修剪的标记进行删除。
如果缓冲区的文件类型与已安装 treesitter 解析器的语言相关联,则将调用 vim.filetype.get_option() 来查找与光标位置相对应的 'commentstring' 值。(这可能与缓冲区的 'commentstring' 不同,在 treesitter-语言注入 的情况下。)
gc gc-default gc{motion} 注释或取消注释 {motion} 覆盖的行。
gcc gcc-default gcc 注释或取消注释从光标开始的 [count] 行。
v_gc v_gc-default {Visual}gc 注释或取消注释选定的行。
o_gc o_gc-default gc 光标周围最大连续非空注释块的文本对象(例如,gcgc 取消注释注释块;dgc 删除它)。仅在操作等待模式下有效。
主要
命令索引
快速参考