Nvim :help 页面,生成 于 源代码,使用 tree-sitter-vimdoc 解析器。
vim -o file1 file2 file3"-oN",其中 N 是十进制数,将打开 N 个水平拆分的窗口。如果文件名比窗口多,则只打开 N 个窗口,一些文件将不会获得窗口。如果窗口比文件名多,则最后几个窗口将编辑空缓冲区。类似地,"-ON" 将打开 N 个垂直拆分的窗口,并具有相同的限制。
CTRL-S CTRL-W_CTRL-SCTRL-S 并非在所有终端上都能正常工作,并且可能会阻塞后续输入,使用 CTRL-Q 继续操作。另请参阅 ++opt 和 +cmd。 E242 E1159 在自动命令中拆分窗口时要小心,如果在进行其他窗口布局更改时发生这种情况,可能会弄乱窗口布局。CTRL-V CTRL-W_CTRL-VCTRL-Q 与 CTRL-V 执行相同的操作,但这里则不相同!CTRL-N CTRL-W_CTRL-N{file} :[N]sp[lit] [++opt] [+cmd] {file} :split_f{file}。此操作几乎类似于首先执行 ":split",然后执行 ":edit" 命令,但原始窗口中的备用文件名将设置为 {file}。如果给出了 [+cmd],则在文件加载后执行该命令 +cmd。另请参阅 ++opt。将新窗口的高度设置为 N(默认为现有高度的一半)。减小当前窗口的高度以腾出空间(以及其他窗口,如果设置了 'equalalways' 选项)。{file} :sf :sfi :sfind splitfind 与 ":split" 相同,但在 'path' 中搜索 {file},类似于 :find。如果未找到 {file},则不会拆分。CTRL-^ CTRL-W_CTRL-^ CTRL-W_^ CTRL-W ^ 将当前窗口拆分为两个,并编辑备用文件。如果给出计数 N,则拆分当前窗口并编辑缓冲区 N。类似于 ":sp #" 和 ":sp #N",但它允许另一个缓冲区没有名称。此命令与 CTRL-^ 的行为匹配,不同之处在于它首先拆分一个窗口。{cmd} 执行 {cmd}。如果它包含拆分窗口的命令,则它将被垂直拆分。对于 vertical wincmd =,窗口将仅在垂直方向上均衡。不适用于 :execute 和 :normal。{cmd} 执行 {cmd}。目前仅对以下命令有影响:wincmd =: 仅在水平方向上均衡窗口。{cmd} :lefta :leftabove :abo[veleft] {cmd} :abo :aboveleft 执行 {cmd}。如果它包含拆分窗口的命令,则它将在当前窗口的左侧(垂直拆分)或上方(水平拆分)打开。覆盖 'splitbelow' 和 'splitright'。不适用于 :execute 和 :normal。{cmd} :rightb :rightbelow :bel[owright] {cmd} :bel :belowright 执行 {cmd}。如果它包含拆分窗口的命令,则它将在当前窗口的右侧(垂直拆分)或下方(水平拆分)打开。覆盖 'splitbelow' 和 'splitright'。不适用于 :execute 和 :normal。{cmd} 执行 {cmd}。如果它包含拆分窗口的命令,则它将出现在顶部并占据 Vim 窗口的全部宽度。当拆分是垂直方向时,窗口将出现在最左侧并占据 Vim 窗口的全部高度。不适用于 :execute 和 :normal。{cmd} 执行 {cmd}。如果它包含拆分窗口的命令,则它将出现在底部并占据 Vim 窗口的全部宽度。当拆分是垂直方向时,窗口将出现在最右侧并占据 Vim 窗口的全部高度。不适用于 :execute 和 :normal。:vertical topleft split tags在 Vim 窗口的最左侧打开一个垂直拆分的、全高度的“tags”文件窗口。
CTRL-Q CTRL-W_CTRL-Q{count}: 退出当前窗口。如果给出 {count},则退出 {count} 窗口。 edit-windowCTRL-Q 并非在所有终端上都有效)。如果 [count] 大于最后一个窗口编号,则最后一个窗口将被关闭:1quit " quit the first window
:$quit " quit the last window
:9quit " quit the last window
" if there are fewer than 9 windows opened
:-quit " quit the previous window
:+quit " quit the next window
:+2quit " quit the second next window{count}: 退出当前窗口。如果给出 {count},则退出 {count} 窗口 如果这是缓冲区的最后一个窗口,则对该缓冲区的所有更改都会丢失。退出最后一个窗口(不包括帮助窗口)时,退出 Vim。缓冲区的内容将丢失,即使 'hidden' 已设置。{count}: 关闭当前窗口。如果给出,则关闭 {count} 窗口。CTRL-O CTRL-W_CTRL-O :on :only 使当前窗口成为屏幕上唯一的窗口。所有其他窗口都将关闭。对于 {count},请参见上面的 :quit 命令 :count_quit。<Down> CTRL-W_<Down>CTRL-J CTRL-W_CTRL-J CTRL-W_j CTRL-W j 将光标移动到当前窗口下方的第 N 个窗口。使用光标位置在备选项之间进行选择。<Up> CTRL-W_<Up>CTRL-K CTRL-W_CTRL-K CTRL-W_k CTRL-W k 将光标移动到当前窗口上方的第 N 个窗口。使用光标位置在备选项之间进行选择。<Left> CTRL-W_<Left>CTRL-H CTRL-W_CTRL-H<BS> CTRL-W_<BS> CTRL-W_h CTRL-W h 将光标移动到当前窗口左侧的第 N 个窗口。使用光标位置在备选项之间进行选择。<Right> CTRL-W_<Right>CTRL-L CTRL-W_CTRL-L CTRL-W_l CTRL-W l 将光标移动到当前窗口右侧的第 N 个窗口。使用光标位置在备选项之间进行选择。CTRL-W 不使用计数:将光标移动到当前窗口下方/右侧的 focusable 窗口。如果没有(focusable)窗口在下方或右侧,则转到左上角窗口。使用计数:转到第 N 个窗口(窗口从左上角到右下角编号)。要获取窗口编号,请参见 bufwinnr() 和 winnr()。当 N 大于窗口数时,转到最后一个窗口。{arg} :winc[md] [count] {arg} 类似于执行 CTRL-W [count] {arg}。示例:wincmd j
:exe nr .. "wincmd w"
CTRL-W 命令也可以用 :wincmd 执行,这些地方不能使用普通模式命令或使用起来不方便(例如在基于浏览器的终端中)。CTRL-R 将窗口向下/向右旋转。第一个窗口变为第二个窗口,第二个窗口变为第三个窗口,依此类推。最后一个窗口变为第一个窗口。光标保持在同一个窗口中。这仅适用于当前窗口所在的行或列的窗口。CTRL-X 不带计数:将当前窗口与下一个窗口交换。如果不存在下一个窗口,则与上一个窗口交换。带计数:将当前窗口与第 N 个窗口交换(第一个窗口为 1)。光标将放置在另一个窗口中。当垂直和水平窗口分割混合时,交换仅在当前窗口所在的行或列的窗口中进行。CTRL-W K 会将它们更改为水平分割的窗口。CTRL-W H 则反过来。:tab split,但之前的窗口会被关闭。当指定计数时,新的标签页将在具有此索引的标签页之前打开。否则,它将在当前标签页之后打开。vertical wincmd = 。要仅水平均衡(使窗口具有相同的宽度),请使用 horizontal wincmd = 。:resize,但将大小应用于窗口 {winnr} 而不是当前窗口。{nr}。{
all: {width: 0, height: 2, leftcol: 0, skipcol: 0, topline: 1, topfill: 0},
1003: {width: 0, height: -1, leftcol: 0, skipcol: 0, topline: 0, topfill: 0},
1006: {width: 0, height: 1, leftcol: 0, skipcol: 0, topline: 1, topfill: 0},
}请注意,"all" 条目具有累积的各个窗口的绝对值。winlayout() 和 getwininfo() 函数。{file} .. 在窗口中编辑第一个 {file}。{cmd} 在每个 可聚焦 窗口中执行 {cmd},或者只针对窗口编号在给定 [range] 中的窗口执行。它就像执行以下操作一样CTRL-W t
:{cmd}
CTRL-W w
:{cmd}
etc.{cmd} 可以包含 '|' 来连接多个命令。 {cmd} 不得打开或关闭窗口,也不得重新排列它们。{cmd} 在缓冲区列表中的每个缓冲区中执行 {cmd},或者如果给出 [range],则只针对缓冲区编号在 [range] 中的缓冲区执行。它就像执行以下操作一样:bfirst
:{cmd}
:bnext
:{cmd}
etc.{cmd} 可以包含 '|' 来连接多个命令。 {cmd} 不得删除缓冲区或将缓冲区添加到缓冲区列表中。 注意: 在执行此命令时,Syntax 自动命令事件将通过将其添加到 'eventignore' 来禁用。这大大加快了编辑每个缓冲区的速度。:windo set nolist foldcolumn=0 | normal! zn这将重置 'list' 选项并在所有窗口中禁用折叠。
:bufdo set fileencoding= | update这将在每个缓冲区中重置 'fileencoding',并在更改缓冲区时写入它。结果是所有缓冲区都将使用 'encoding' 编码(如果转换成功)。
CTRL-] 将当前窗口拆分成两个。使用光标下的标识符作为标签并跳转到新上部窗口中的标签。在 Visual 模式下,使用 Visually 选定的文本作为标签。将新窗口的高度设置为 N。CTRL-] 将当前窗口拆分成两个。使用光标下的标识符作为标签并对新上部窗口中的标签执行 ":tjump"。在 Visual 模式下,使用 Visually 选定的文本作为标签。将新窗口的高度设置为 N。CTRL-F 将当前窗口拆分成两个。编辑光标下的文件名。就像 ":split gf" 一样,但是如果文件不存在,则不会拆分窗口。使用 'path' 变量作为要查找文件的目录名列表。当前文件的路径也用于搜索文件名。如果名称是看起来像 "type://machine/path" 的超文本链接,则只使用 "/path"。如果给出计数,则编辑第 count 个匹配文件。CTRL-Z CTRL-W_CTRL-Z :pc :pclose :pc[lose][!] 关闭当前打开的任何“预览”窗口。当 'hidden' 选项被设置,或者当缓冲区被更改并且使用了 [!] 时,缓冲区会变为隐藏状态(除非有另一个窗口正在编辑它)。如果任何“预览”缓冲区无法关闭,则命令将失败。另请参见 :close。{file} 在预览窗口中编辑 {file}。预览窗口与 :ptag 一样打开。当前窗口和光标位置不会改变。有用的例子:pedit +/fputc /usr/include/stdio.h
:psearch popen
:au! CursorHold *.[ch] ++nested exe "silent! psearch " .. expand("<cword>"):au! CursorHold *.[ch] ++nested exe "silent! ptag " .. expand("<cword>")当光标在使用 'updatetime' 设置的时间内没有移动时,这将导致对光标下的关键字执行 ":ptag" 操作。"++nested" 使其他自动命令被执行,从而使语法高亮在预览窗口中生效。"silent!" 避免在找不到标签时出现错误消息。另请参见 CursorHold。要再次禁用它:au! CursorHold一个很好的补充是突出显示找到的标签,避免在光标下没有单词时执行 ":ptag",以及其他一些事情
:au! CursorHold *.[ch] ++nested call PreviewWord()
:func PreviewWord()
: if &previewwindow " don't do this in the preview window
: return
: endif
: let w = expand("<cword>") " get the word under cursor
: if w =~ '\a' " if the word contains a letter
:
: " Delete any existing highlight before showing another tag
: silent! wincmd P " jump to preview window
: if &previewwindow " if we really get there...
: match none " delete existing highlight
: wincmd p " back to old window
: endif
:
: " Try displaying a matching tag for the word under the cursor
: try
: exe "ptag " .. w
: catch
: return
: endtry
:
: silent! wincmd P " jump to preview window
: if &previewwindow " if we really get there...
: if has("folding")
: silent! .foldopen " don't want a closed fold
: endif
: call search("$", "b") " to end of previous line
: let w = substitute(w, '\\', '\\\\', "")
: call search('\<\V' .. w .. '\>') " position cursor on match
: " Add a match highlight to the word at this position
: hi previewWord term=bold ctermbg=green guibg=green
: exe 'match previewWord "\%' .. line(".") .. 'l\%' .. col(".") .. 'c\k*"'
: wincmd p " back to old window
: endif
: endif
:endfun
<empty> 使用 'hidden' 的值。 hide 隐藏此缓冲区,即使 'hidden' 未被设置。 unload 不要隐藏,但卸载此缓冲区,即使 'hidden' 被设置。 delete 删除缓冲区。CTRL-^" 转到特定缓冲区,其中 N 是缓冲区编号。CTRL-^ 的备用缓冲区 a 活动缓冲区:它已加载并可见 h 隐藏的缓冲区:它已加载,但当前未在窗口中显示 hidden-buffer - 'modifiable' 关闭的缓冲区 = 只读缓冲区 R 带有正在运行作业的终端缓冲区 F 带有已完成作业的终端缓冲区 ? 没有作业的终端缓冲区::terminal NONE + 修改过的缓冲区 x 带有读取错误的缓冲区- 'modifiable' 关闭的缓冲区 = 只读缓冲区 a 活动缓冲区 u 未列出的缓冲区(覆盖 "!") h 隐藏的缓冲区 x 带有读取错误的缓冲区 % 当前缓冲区 # 备用缓冲区 R 带有正在运行作业的终端缓冲区 F 带有已完成作业的终端缓冲区 t 显示上次使用时间并对缓冲区进行排序 组合标志意味着它们是 "and"ed 运算,例如: h+ 隐藏的修改过的缓冲区 a+ 活动的修改过的缓冲区filter /\.vim/ ls
{fname} 如果文件名 {fname} 尚未列出,则将其添加到缓冲区列表中,而不加载它。如果缓冲区之前被删除,但未被擦除,则它将被重新列出。如果指定了 "lnum",则光标将在第一次进入缓冲区时定位在该行。请注意, + 后的其他命令将被忽略。:.,$-bdelete "delete buffers from the current one to
" last but one
:%bdelete " delete all buffers{bufname} :N,Mbw[ipeout][!] :bw[ipeout][!] N1 N2 ... 与 :bdelete 相似,但确实删除了缓冲区。与缓冲区相关的所有内容都将丢失。此缓冲区中的所有标记都将失效,选项设置将丢失,跳转列表和标签栈数据将被清除,等等。除非您知道自己在做什么,否则不要使用它。例子:.+,$bwipeout " wipe out all buffers after the current
" one
:%bwipeout " wipe out all buffers{bufname} 与 ":bunload[!] [N]" 相似,但缓冲区由名称给出。另请参见 {bufname}。{bufname} {bufname}{bufname}。部分名称也可以使用,只要它在缓冲区列表中是唯一的。请注意,名称为数字的缓冲区不能用该名称引用;请改用缓冲区编号。在缓冲区名称中的空格之前插入反斜杠。有关 [!],请参阅 :buffer-!。这也会编辑缓冲区列表中不存在的缓冲区,而不会设置 'buflisted' 标志。另请参阅 +cmd。{bufname} 拆分窗口并编辑缓冲区列表中的缓冲区 {bufname}。这也会编辑缓冲区列表中不存在的缓冲区,而不会设置 'buflisted' 标志。 注意:如果您想做的是拆分缓冲区,并在另一个名称下创建副本,您可以这样操作:w foobar | sp #
:setlocal buftype=nowrite :setlocal bufhidden=delete :setlocal noswapfile
:setlocal buftype=nofile :setlocal bufhidden=hide :setlocal noswapfile
:setlocal nobuflisted