Vim之打开和关闭窗口

来源:互联网 发布:不让电脑安装软件 编辑:程序博客网 时间:2024/06/07 05:37
3. 打开和关闭窗口 *opening-window* *E36*


CTRL-W s *CTRL-W_s* CTRL-W S* CTRL-W_S* CTRL-W CTRL-S *CTRL-W_CTRL-S*
:[N]sp[lit] [++opt] [+cmd] *:sp* *:split*
把当前窗口分割成两个,结果是两个窗口显示同一个文件。新打开的窗口高度为 N (默认值是当前窗口高度的一半)。减少当前窗口的高度,空出地方给新的窗口 (如果你置位了 'equalalways' 选项,并且'eadirection' 没有设置为 "hor",并且其它窗口中的一个高于当前或新窗口的话,其它窗口也被影响)。
备注: 不是在所有的终端都能使用 CTRL-S,并且可能导致不能继续输入,遇到这种情况,用 CTRL-Q 继续。参见 |++opt| 和 |+cmd|。


CTRL-W CTRL-V *CTRL-W_CTRL-V* CTRL-W v*CTRL-W_v*
:[N]vs[plit] [++opt] [+cmd] [file] *:vs* *:vsplit*
与 |:split| 类似,但垂直分割窗口。满足以下条件的话,窗口会被均匀地水平铺开:
1. 没有指定宽度,
2. 打开了 'equalalways' 选项,
3. 'eadirection' 不是 "ver",且
4. 其它窗口中的一个宽于当前或新窗口。
备注: 在其它地方 CTRL-Q 与 CTRL-V 相同,但是在这里不是!


CTRL-W n *CTRL-W_n* CTRL-W CTRL_N*CTRL-W_CTRL-N*
:[N]new [++opt] [+cmd] *:new*
创建一个新窗口并且开始编辑一个空文件。新窗口的高度为 N (默认值为现存高度的一半)。减少当前窗口的高度,为新窗口留出空间 (如果你打开了 'equalalways' 选项,并且 'eadirection' 没有设置为"hor",其它窗口也会被影响)。
参见:|++opt| and |+cmd|。
如果设置了 'fileformats' 选项,那么新缓冲区会使用其中的第一个格式。如果 'fileformats' 为空,那么使用当前缓冲区的'fileformat' 值。这个值可以被 |++opt| 参数覆盖。自动命令以如下顺序被执行:
1. 在当前窗口执行 WinLeave
2. 在新窗口里执行 WinEnter
3. 在当前缓冲区执行 BufLeave
4. 在新缓冲区执行 BufEnter
这跟先执行 ":split",再执行一个 ":e" 命令的效果差不多。


:[N]vne[w] [++opt] [+cmd] [file] *:vne* *:vnew*
与 |:new| 命令相似,但是它垂直分割窗口,如果打开了'equalalways' 选项,并且选项 'eadirection' 没有设置为 "ver",窗口会被均匀地水平铺开,除非你给出了指定窗口宽度的参数。


:[N]new [++opt] [+cmd] {file}
:[N]sp[lit] [++opt] [+cmd] {file} *:split_f*
创建一个新的窗口,并且开始编辑文件 {file}。如果使用了 [+cmd]参数,文件加载完毕后会执行命令 |+cmd|。也参见:|++opt|。新窗口的高度为 N (默认值为现存高度的一半)。减少当前窗口的高度,为新窗口留出空间 (如果你打开了 'equalalways' 选项,其它窗口也会被影响)。


:[N]sv[iew] [++opt] [+cmd] {file} *:sv* *:sview* *splitview*
与 ":split" 命令相同,但是会给缓冲区置位 'readonly' 选项。


:[N]sf[ind] [++opt] [+cmd] {file} *:sf* *:sfind* *splitfind*
与 ":split" 命令相同,但是会在 'path' 里寻找 {file},就像|:find| 那样。如果找不到,就不会分割窗口。


CTRL-W CTRL-^ *CTRL-W_CTRL-^* *CTRL-W_^*
CTRL-W ^ 执行 ":split #" 命令,把窗口分成两个,并且编辑轮换文件。如果指定了计数,就变成了 ":split #N",分割窗口,并且编辑第 N 个缓冲区。


注意 'splitbelow' 和 'splitright' 选项会影响新窗口的位置。


*:vert* *:vertical*
:vert[ical] {cmd}
执行 {cmd}。如果包含一个分割窗口的命令,那么将垂直分割窗口。不能用于 |:execute| 和 |:normal|。


:lefta[bove] {cmd} *:lefta* *:leftabove*
:abo[veleft] {cmd} *:abo* *:aboveleft*
执行 {cmd}。如果包含一个分割窗口的命令,那么将从当前窗口的左(垂直分割) 或者上方 (水平分割) 分割窗口,而忽略 'splitbelow'和 'splitright' 的设置。不能用于 |:execute| 和 |:normal|。


:rightb[elow] {cmd} *:rightb* *:rightbelow*
:bel[owright] {cmd} *:bel* *:belowright*
执行 {cmd}。如果包含一个分割窗口的命令,那么将从当前窗口的右(垂直分割) 或者下方 (水平分割) 分割窗口,而忽略 'splitbelow'和 'splitright' 的设置。不能用于 |:execute| 和 |:normal|。


*:topleft* *E442*
:to[pleft] {cmd}
执行 {cmd}。如果包含一个分割窗口的命令,那么该窗口出现在顶部,并且占据最大宽度。当垂直分割窗口时,窗口出现在最左边,并且占据最大高度。不能用于 |:execute| 和 |:normal|。


*:botright*
:bo[tright] {cmd}
执行 {cmd}。如果包含一个分割窗口的命令,那么该窗口出现在底部,并且占据最大宽度。当垂直分割窗口时,窗口出现在最右边,并且占据最大高度。不能用于 |:execute| 和 |:normal|。


这些修饰符可以结合使用来打开一个垂直分割的并且占据最大高度的窗口: >
:vertical topleft edit tags
在 Vim 窗口最左边打开一个垂直分割的、最大高度的窗口,用来编辑 tags 文件。




关闭窗口
----------------


CTRL-W q *CTRL-W_q*
CTRL-W CTRL-Q *CTRL-W_CTRL-Q*
:q[uit] 退出当前窗口。如果退出的是最后一个窗口 (不包括帮助窗口),就会退出 Vim。
如果置位了 'hidden' 并且只有此一个窗口监视当前缓冲区,那么该缓冲区被隐藏。
如果没有置位 'hidden',并且只有当前这一个窗口监视该缓冲区,而且缓冲区被修改了,那么该命令不会成功。
(注意:CTRL-Q 不是在所有的终端下都好用)


:q[uit]! 退出当前窗口。如果这是缓冲区的最后一个窗口,那么对于此缓冲区的改动将全部丢失。如果退出的是最后一个窗口 (不包括帮助窗口),就会退出 Vim。缓冲区里的全部内容将丢失。即使置位了 'hidden' 选项也是如此。


CTRL-W c *CTRL-W_c* *:clo* *:close*
:clo[se][!] 关闭当前窗口。如果置位了 'hidden',或者改动了缓冲区但是命令里用了 [!],缓冲区会被隐藏 (除非还有一个窗口在编辑该缓冲区)。如果当前标签页只有一个窗口而且有其它标签页,关闭当前标签页。
|tab-page|。
该命令在下述情况下会失败: *E444*
- 屏幕上只剩下最后一个窗口的时候。
- 当 'hidden' 没有置位,也没有用 [!],并且缓冲区也已经被修改,
 而且也没有其它窗口监视该缓冲区的时候。对缓冲区的改动既不写入文件,也不会丢失,所以这是个 "安全" 的命令。


CTRL-W CTRL-C *CTRL-W_CTRL-C*
你可能会认为 CTRL-W CTRL-C 关闭当前窗口,但是这不行,因为CTRL-C 会撤消整个命令。


*:hide*
:hid[e] 除非是屏幕上的最后一个窗口,退出当前窗口,缓冲区被隐藏起来(除非还有另一个窗口正在编辑它,或者 'bufhidden' 设置为"unload" 或 "delete")。
如果这是当前标签页的最后一个窗口,关闭此标签页。
|tab-page|此命令不受 'hidden' 的值影响。
对缓冲区的改动既不写入文件,也不会丢失,所以这是个 "安全" 的命
令。


:hid[e] {cmd} 执行 {cmd},其间置位 'hidden' 选项。{cmd} 执行完毕后,先前的
'hidden' 选项会被恢复。
例如: >
   :hide edit Makefile
< 编辑 "Makefile" 文件,如果当前缓冲区有改动的话,隐藏之。


CTRL-W o *CTRL-W_o* *E445*
CTRL-W CTRL-O *CTRL-W_CTRL-O* *:on* *:only*
:on[ly][!] 使当前窗口成为屏幕上唯一的窗口。其它窗口都关闭。如果置位了 'hidden' 选项,被关闭窗口里的所有缓冲区变成隐藏。如果没有置位 'hidden',但是置位了 'autowrite' 选项,那么已经更改的缓冲区被写入文件。否则,除非使用 [!] 强制关闭,那些包含修改过的缓冲区的窗口不被删除,它们转入隐藏状态。因为修改过的缓冲区永远不会被放弃,缓冲区的改动也永远不会丢失。


详情请见:help window

原创粉丝点击