📄 windows.cnx
字号:
本操作只能移动同行或同列的窗口。 *CTRL-W_R*CTRL-W R 向左上方向移动窗口。第一个窗口变成第二个,第二个变成第三个…… 最后一个变成第一个。光标保留在相同窗口里。 本操作只能移动同行或同列的窗口。CTRL-W x *CTRL-W_x* *CTRL-W_CTRL-X*CTRL-W CTRL-X 若没有计数器:交换当前窗口与下一个窗口。如果没有下一个窗口,则 与前一个窗口交换。 若有计数器:交换当前窗口与第 N 个窗口(第一个窗口为 1 )。光标 在另一个窗口里。 如果既有垂直分割又有水平分割,那么只能与当前窗口同行或者同列的 窗口进行交换。下面的几个命令可以被用来改变窗口的布局。例如,CTRL-W K 可以把两个垂直分割的窗口变成水平分割的窗口。CTRL-W H 则正好相反。 *CTRL-W_K*CTRL-W K 把当前窗口放到最顶端,并且是最大宽度。这很像在关闭当前窗口之后, 再用 ":topleft split" 打开一个新的窗口,不过新窗口只包含当前窗 口的内容。 *CTRL-W_J*CTRL-W J 把当前窗口放到最底部,并且是最大宽度。这很像在关闭当前窗口之后, 再用 ":botright split" 打开一个新的窗口,不过新窗口只包含当前 窗口的内容。 *CTRL-W_H*CTRL-W H 把当前窗口放到最左边,并且是最大高度。这很像在关闭当前窗口之后, 再用 ":vert topleft split" 打开一个新的窗口,不过新窗口只包含 当前窗口的内容。 {如果编译时没有加入 +vertsplit 属性则不可用} *CTRL-W_L*CTRL-W L 把当前窗口放到最右边,并且是最大高度。这很像在关闭当前窗口之后, 再用 ":vert botright split" 打开一个新的窗口,不过新窗口只包含 当前窗口的内容。 {如果编译时没有加入 +vertsplit 属性则不可用}==============================================================================6. 改变窗口的大小 *window-resize* *CTRL-W_=*CTRL-W = 使得(几乎)所有窗口等宽、等高,但是对当前窗口使用 'winheight' 和 'winwidth' 来设置。:res[ize] -N *:res* *:resize* *CTRL-W_-*CTRL-W - 使得当前窗口高度减 N (默认值是 1)。 如果在 'vertical' 之后使用,则使得宽度减 N 。:res[ize] +N *CTRL-W_+*CTRL-W + 使得当前窗口高度加 N (默认值是 1)。 如果在 'vertical' 之后使用,则使得宽度加 N 。:res[ize] [N]CTRL-W CTRL-_ *CTRL-W_CTRL-_* *CTRL-W__*CTRL-W _ 设置当前窗口的高度为 N (默认值为可能的最大值)。z{nr}<CR> 设置当前窗口的高度为 {nr} 。 *CTRL-W_<*CTRL-W < 使得当前窗口宽度减 N (默认值是 1)。 *CTRL-W_>*CTRL-W > 使得当前窗口宽度加 N (默认值是 1)。:vertical res[ize] [N] *:vertical-resize* *CTRL-W_bar*CTRL-W | 设置当前窗口的宽度为 N (默认值为可能的最大值)。你也可以用鼠标上下拖动水平分割栏来改变窗口的高度,或者左右拖动垂直分割栏来改变窗口宽度。这些功能只有在支持鼠标的版本里,并且设置了 'mouse' 选项才可以用。选项 'winheight' ('wh') 用来设置当前窗口的最小高度。每当其它窗口变为当前窗口的时候,这一选项就会生效。如果设置为 0 ,则禁用。把 'winheight' 设一个很大的值,例如,'9999',就使得当前窗口永远占据尽可能大的空间。设置一个合理的值,比如说,'10',就会感觉比较舒服。同样,'winwidth' ('wiw') 选项设定了当前窗口的最小宽度。如果设置了 'equalalways' ('ea') 选项,在分割或者关闭窗口之后,所有窗口都会变为相同大小。如果你没有设置这个选项,分割窗口时只会减少当前窗口的大小,而其它窗口保持不变。当关闭窗口时,多出来的行会被上面的窗口占用。选项 'eadirection' 用来限制 'equalalways' 的作用方向。默认值是 "both" ,两个方向都改变。当设置为 "ver" 时,只限制所有窗口的高度必须相同,这样你可以自己调节窗口的宽度。同样,"hor" 使得窗口的宽度都相等。选项 'cmdheight' ('ch') 用来设置命令行的高度。如果你对 |hit-enter| 的提示信息感到厌烦,就把它设置为 2 或 3 。如果只有一个窗口,那么改变该窗口大小的同时也会改变命令行的高度。如果有多个窗口,那么改变当前窗口的大小也会改变它下面的窗口(有时是上面的窗口)的高度。一个窗口的最小高度和最小宽度可以用 'winminheight' 和 'winminwidth' 设定。这是硬性值,一旦设定,窗口的高度(或宽度)将不能小于该值。==============================================================================7. 参数和缓冲区的列表命令 *buffer-list* 参数列表 缓冲区列表 含义 ~1. :[N]argument [N] 11. :[N]buffer [N] 切换至第 N 号参数/缓冲区2. :[N]next [file ..] 12. :[N]bnext [N] 切换至向后数第 N 个参数/缓冲区3. :[N]Next [N] 13. :[N]bNext [N] 切换至向前数第 N 个参数/缓冲区4. :[N]previous [N] 14. :[N]bprevious [N] 切换至向前数第 N 个参数/缓冲区5. :rewind / :first 15. :brewind / :bfirst 切换至第一个参数/缓冲区6. :last 16. :blast 切换至最后一个参数/缓冲区7. :all 17. :ball 编辑所有的参数/缓冲区 18. :unhide 编辑所有已载入的缓冲区 19. :[N]bmod [N] 切换至第 N 个已修改的缓冲区 分割 & 参数列表 分割 & 缓冲区列表 含义 ~21. :[N]sargument [N] 31. :[N]sbuffer [N] 分割 + 切换至第 N 号参数/缓冲区22. :[N]snext [file ..] 32. :[N]sbnext [N] 分割 + 切换至向后数第 N 个参数/缓冲区23. :[N]sNext [N] 33. :[N]sbNext [N] 分割 + 切换至向前数第 N 个参数/缓冲区24. :[N]sprevious [N] 34. :[N]sbprevious [N] 分割 + 切换至向前数第 N 个参数/缓冲区25. :srewind / :sfirst 35. :sbrewind / :sbfirst 分割 + 切换至第一个参数/缓冲区26. :slast 36. :sblast 分割 + 切换至最后一个参数/缓冲区27. :sall 37: :sball 编辑所有的参数/缓冲区 38. :sunhide 编辑所有已载入的缓冲区 39. :[N]sbmod [N] 分割 + 切换至第 N 个已修改的缓冲区40. :args 显示参数列表41. :buffers 显示缓冲区列表上述命令中的 [N] 是什么含义,取决于你使用什么命令: 在命令 ?2,?3,和 ?4 中,[N] 是向前/向后的个数。 在命令 1 和 21 中,[N] 是参数号码,默认值是当前参数。 在命令 11 和 31 中,[N] 是缓冲区号码,默认值是当前缓冲区。 在命令 19 和 39 中,[N] 计数器。Note: ":next" 是一个例外,因为它必须以文件名列表为参数,这是为了和 Vi 兼容。参数列表和多窗口--------------------------------------每一个窗口所编辑的文件可能位于参数列表的不同位置。记住!当 ":e file" 一个文件时,你在参数列表中的位置没有变化,但你并不是在编辑处于那个位置的文件。为了说明这一点,文件消息(和标题栏,如果有的话)会显示 "(file (N) of M)","(N)" 是当前文件在列表中的位置,"M" 是列表中文件的数量。所有参数列表中的条目都被加载到缓冲区列表中,这样你也可以用缓冲区列表的命令进行操作,比如":bnext" 。:[N]al[l][!] [N] *:al* *:all* *:sal* *:sall*:[N]sal[l][!] [N] 重新整理屏幕,为每一个参数打开一个窗口。其它窗口统统关闭。如果 使用了计数器,则其数值为窗口数目的最大值。 如果设置了 'hidden' ,所有要关闭的窗口变为隐藏。 如果没有设置 'hidden' ,但是设置了 'autowrite' ,那么所有改动 的缓冲区被写入文件。否则,包含更改过的缓冲区的窗口不会被删除, 除非你用 [!] 使它们隐藏。更改过的缓冲区永远不会被丢弃,所以改 动不会丢失。 Buf/Win Enter/Leave 自动命令不会被这里的新窗口执 行,只有在它们真正进入时才会执行。:[N]sa[rgument][!] [++opt] [+cmd] [N] *:sa* *:sargument* 这是 ":split | argument [N]" 命令的简写。分割窗口并切换至第 N 号参数。但是如果该参数不存在,窗口也不会分割。参见 |++opt| 和 |+cmd| 。:[N]sn[ext][!] [++opt] [+cmd] [file ..] *:sn* *:snext* 这是 ":split | [N]next" 命令的简写。 分割窗口并切换到向后数第 N 个参数。 但是如果该参数不存在,窗口也不会分割。参见 |++opt| 和 |+cmd| 。:[N]spr[evious][!] [++opt] [+cmd] [N] *:spr* *:sprevious*:[N]sN[ext][!] [++opt] [+cmd] [N] *:sN* *:sNext* 这是 ":split | [N]Next" 命令的简写。 分割窗口并切换到向前数第 N 个参数。 但是如果该参数不存在,窗口也不会分割。参见 |++opt| 和 |+cmd| 。 *:sr* *:srewind*:sr[ewind][!] [++opt] [+cmd] 这是 ":split | rewind" 命令的简写。分割窗口并切换到第一个参数。 但是如果没有参数列表,窗口不会分割。参见 |++opt| 和 |+cmd| 。 *:sfir* *:sfirst*:sfir[st [++opt] [+cmd] 与 ":srewind" 相同。 *:sla* *:slast*:sla[st][!] [++opt] [+cmd] 这是 ":split | rewind" 命令的简写。分割窗口并切换到最后一个参 数。 但是如果没有参数列表,窗口不会分割。参见 |++opt| 和 |+cmd| 。 *:dr* *:drop*:dr[op] {file} .. 把参数列表重新定义为 "{file} .." ,与 ":next" 类似。如果可能的 话,第一个文件出现在当前窗口里。 如果当前缓冲区没有被丢弃 |abandon| ,窗口首先被分割。此命令的 目的在于:可以在 debugger 之类的程序里让 Vim 编辑另一个文件。 {只有在编译时加入 +gui 才可用}==============================================================================8. 在所有的缓冲区和窗口里执行命令 *list-repeat* *:windo*:windo[!] {cmd} 在每一个窗口里执行 {cmd} 。 这就像是: > CTRL-W t :{cmd} CTRL-W w :{cmd} 等等……< 当在一个窗口里检测到错误,剩下的窗口没有被访问到。最后 一个窗口(或者出错的那个窗口)变为当前窗口。 {cmd} 可以包含 '|' 来连接多个命令。 {cmd} 不能打开或关闭窗口,也不能重新装载它们。 Note: 当这个命令正在执行的时候,自动命令的语法事件可以 通过 'eventignore' 禁止。 {Vi 不可用} {若编译时没有加入 |+listcmds| 则不可用} 也参见 |:argdo| 和 |:bufdo|. *:bufdo*:bufdo[!] {cmd} 在每一个缓冲区里执行 {cmd} 。 就像是: > :bfirst :{cmd} :bnext :{cmd} 等等……< 如果当前文件不能被丢弃 |abandon| ,并且没有使用[!],则 会出错当在一个缓冲区里检测到错误,剩下的缓冲区没有被访问到。 没有在列表里出现的缓冲区被略过。 最后一个缓冲区(或者出错的那个缓冲区)变为当前缓冲区。 {cmd} 可以包含 '|' 来连接多个命令。 {cmd} 不能在列表里删除或添加缓冲区。 Note: 当这个命令正在执行的时候,自动命令的语法事件可以 通过 'eventignore' 禁止。这样会加快编辑缓冲区的速度。 {Vi 不可用} {若编译时没有加入 |+listcmds| 则不可用} 参见 |:argdo| 和 |:windo| 。例子: > :windo set nolist nofoldcolumn | normal zn这个命令重新设置了 'list' 选项并在所有的窗口里关闭了折叠功能。 > :bufdo set fileencoding= | update此命令在每个缓冲区里重新设置了 'fileencoding' ,并将改动的缓冲区存盘。结果是所有的缓冲区用 'encoding' 编码(如果执行顺利的话)。==============================================================================9. 当前光标处的标记和文件名 *window-tag* *:sta* *:stag*:sta[g][!] [tagname] 执行 ":tag[!] [tagname]" 并且分割窗口打开新的标记。参见 |:tag| 。CTRL-W ] *CTRL-W_]* *CTRL-W_CTRL-]*CTRL-W CTRL-] 把当前窗口一分为二,把光标所位置的标识符当作标记,并跳转至标记 所指向的地方。新窗口(上面的窗口)的高度为 N 。 *CTRL-W_g]*CTRL-W g ] 把当前窗口一分为二,把光标所位置的标识符当作标记,并在新窗口( 上面的窗口)里执行 ":tselect" 。新窗口的高度为 N 。 *CTRL-W_g_CTRL-]*CTRL-W g CTRL-] 把当前窗口一分为二,把光标所位置的标识符当作标记,并在新窗口( 上面的窗口)里执行 ":tjump" 。新窗口的高度为 N 。CTRL-W f *CTRL-W_f* *CTRL-W_CTRL-F*CTRL-W CTRL-F 把当前窗口一分为二。编辑光标下的文件名。 类似 ":split ]f",但是找不到文件或者文件不存在时,不会分割窗口。 此操作在 'path' 变量所定义的目录和当前文件所在的目录里寻找文件。 如果是一个类似 "type://machine/path" 的超链接,那么只使用 "/path" 。 如果指定了计数器 N ,那么编辑第 N 个匹配的文件。 {如果 |+file_in_path| 在编译时被禁用,则不可用}参见 |CTRL-W_CTRL-I| :为包含文件打开一个窗口(该文件包含当前光标下的关键字)。==============================================================================10. 预览窗口 *preview-window*预览窗口是预览其它文件的特殊窗口。它通常是一个用来查看包含文件或者函数定义的小窗口。 {若编译时未加入 |+quickfix| 属性,则不可用}只能有一个预览窗口,可以用如下命令之一创建。选项 'previewheight' 可以用来制定预览窗口的高度;选项 'previewwindow' 使得预览窗口可区分。 *:pta* *:ptag*:pta[g][!] [tagname] 执行 ":tag[!] [tagname]" 并且在预览窗口里显示标签所指向的内容, 而不改变当前缓冲区和光标的位置。如果预览窗口已经打开,则会被再 次使用(类似于帮助窗口)。如果是打开一个新的预览窗口,那么其高 度由 'previewheight' 决定。也参见 |:tag| 。参考下面这个例子。 |CursorHold-example|CTRL-W z *CTRL-W_z*CTRL-W CTRL-Z *CTRL-W_CTRL-Z* *:pc* *:pclose*:pc[lose][!] 关闭当前打开的预览窗口。如果设置了 'hidden' ,或者更改了缓冲区 并且使用了 [!] ,则缓冲区变为隐藏(除非还有其它窗口正在编辑该 缓冲区)。如果预览窗口的缓冲区不能关闭,此命令失败。也参见 |:close|. *:pp* *:ppop*:[count]pp[op][!] 在预览窗口执行 ":[count]pop[!]" 。参见 |:pop| 和 |:ptag| 。 {Vi 没有此功能}CTRL-W } *CTRL-W_}* 使用当前光标所处位置的标识符作为标签,执行 :ptag 。生成预览窗 口(如果需要的话),窗口的高度为 N ,如果没指定高度,就使用 'previewheight' 的值。CTRL-W g } *CTRL-W_g}* 使用当前光标所处位置的标识符作为标签,执行 :ptjump 。生成预览 窗口(如果需要的话),窗口的高度为 N ,如果没指定高度,就使用 'previewheight' 的值。 *:ped* *:pedit*:ped[it][!] [++opt] [+cmd] {file} 在预览窗口里编辑文件 {file} 。预览窗口就像是用 |:ptag| 命令打 开的。当前窗口和光标的位置都不改变。一个有用的例子: >
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -