WINDOWS

*windows.txt*   For Vim version 6.1.  原文最后更新: 2001年1月30日


                  VIM 参考手册    作者:Bram Moolenaar
                                  翻译:Dasn<[email protected]>
                                  VCD主页:http://vimcdoc.sf.net

使用多个窗口和缓冲区进行编辑                              *windows* *buffers*

下面我们看一下操作多个窗口和缓冲区的命令。另外有些命令在操作多个窗口的时候不同
于单个窗口,这也是需要解释的。

一些基本的内容在用户手册的第 7、8 两个章节里 |usr_07.txt| |usr_08.txt|
已经介绍过了。

1.  简介                                      |windows-intro|
2.  启动 Vim                                  |windows-starting|
3.  打开和关闭一个窗口                         |opening-window|
4.  把光标移动到另一个窗口                   |window-move-cursor|
5.  窗口的移动                                     |window-moving|
6.  改变窗口的大小                               |window-resize|
7.  参数和缓冲区的列表命令                   |buffer-list|
8.  在所有的缓冲区和窗口里执行命令               |list-repeat|
9.  当前光标处的标记和文件名                        |window-tag|
10. 预览窗口                                        |preview-window|
11. 使用隐藏的缓冲区                            |buffer-hidden|
12. 特殊类型的缓冲区                            |special-buffers|

{Vi 没有这些命令}
{如果在编译时没有加入 |+windows|,则不能使用多个窗口}
{如果在编译时没有加入 |+vertsplit|,则不能垂直分割窗口}


1. 简介                                                       *windows-intro*

“窗口”被用来查看缓冲区里的内容。你可以用多个窗口观察同一个缓冲区,也可以用
多个窗口观察不同的缓冲区。

“缓冲区”是一块内存区域,里面存储着正在编辑的文件。如果没有把缓冲区里的文件存
盘,那么原始文件不会被更改。

缓冲区的状态可以是下述三种情况之一:

                                                        *active-buffer*
激活:         缓冲区的内容显示在一个窗口里。如果该缓冲区是针对某一个文件创建的,那
          么该文件已经被读入缓冲区。如果缓冲区被更改过,其内容便会与原文件不同。
                                                        *hidden-buffer*
隐藏:         缓冲区的内容不被显示。如果该缓冲区是针对某一个文件创建的,那么么该文
          件已经被读入缓冲区。其实它与激活状态一样,只是你看不见它。
                                                        *inactive-buffer*
非激活:  缓冲区的内容不被显示,也不包含任何数据。文件一旦被装入,与该缓冲区相
          关的选项会被记住。这些选项可以包括 |viminfo| 文件里的一些标记,但是
          这种缓冲区不能包含文本。

用一个表来说明:

状态          在窗口显示 文件装载    用 ":buffers" 命令 
                                                  显示 
激活            yes            yes              'a'
隐藏            no             yes              'h'
非激活                 no             no               ' '

Note: 所有的 CTRL-W 命令都可以用 |:wincmd| 执行,当我们不能在正常模式下输入命
令,或者输入不方便时可以试一下。


2. 启动 Vim                                           *windows-starting*

在默认情况下,与 Vi 类似, Vim 启动后只打开一个窗口。

参数 "-o" 和 "-O" 可以让 Vim 为参数列表里的每一个文件打开一个窗口。参数 "-o"
水平分割窗口;参数 "-O" 垂直分割窗口。如果 "-o" 和 "-O" 都用了,那么最后一个参
数决定分割的方向。例如,下面的例子打开三个水平分割的窗口:
        Vim -o file1 file2 file3

参数 "-oN" ,这里的 N 是一个十进制数,用这个参数可以打开 N 个水平分割的窗口。
如果文件名的个数多于窗口数目,则只打开 N 个窗口,这样有一些文件就得不到窗口来
显示。如果指定的窗口数多于文件的个数,那么后面的几个窗口会编辑空的缓冲区。同样,
"-ON"  打开 N 个垂直分割的窗口,相应的规则与 "-oN" 相同。

如果你打开了很多的文件,每个窗口都会便得很小。你可能需要设置 'winheight' 和
'winwidth' 选项来创建一个适合工作的环境。

Buf/Win Enter/Leave 等自动命令 |autocommand| 不会在打开窗口或读取文件时运行,
只有在真正进入程序后才会运行。

                                                        *status-line*
状态栏用来分割窗口。选项 'laststatus' 用来设置在什么时候最后一个窗口可以有状态
栏:
        'laststatus' = 0        不要状态栏
        'laststatus' = 1        窗口数多于一个的时候
        'laststatus' = 2        总是显示状态栏

你可以通过设置 'statusline' 选项来改变状态栏的内容。

通常状态栏用反色显示。你可以通过修改 'highlight' 选项中的 's' 字符来改变。例如,
"sb" 设置为粗体字。如果没有启用状态栏加亮 ("sn"), 那么字符 '^' 表示当前窗口,
字符 '=' 表示其它窗口。如果支持鼠标,并且已经通过设置 'mouse' 选项使之启动,那
么你可以用鼠标拖动状态栏以改变窗口的大小。

Note: 如果你想让状态栏以反色显示,但是它没有。查看一下 'highlight' 选项是否包
含了 "si"。在 3.0 版本里,这意味着反转(invert)状态栏,但是现在应该使用 "sr",
反转(reverse)状态栏,因为 "si" 现在表示斜体(italic)!如果你的终端不支持斜
体,那么状态栏还是会以反色显示;这种问题只会出现在支持斜体字的 termcap 终端上。


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")。
                Note: 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| 类似, 但垂直分割窗口。如果打开了 'equalalways' 选
                项,并且选项 'eadirection' 没有设置为 "ver" ,窗口会被水平铺开,
                除非你指定了窗口的宽度。
                Note: 在其它地方 CTRL-QCTRL-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} 。如果找不
                到,就不会分割窗口。

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

Note 'splitbelow' 和 'splitright' 会影响窗口。

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

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

:rightb[elow] {cmd}                             *:rightb* *:rightbelow*
:bel[owright] {cmd}                             *:bel* *:belowright*
                执行 {cmd} 。 如果包含一个分割窗口的命令,那么将从当前窗口的右
                (垂直分割)或者下方(水平分割)分割窗口,而不管 'splitbelow'
                和 'splitright' 的设置。
                                                *:topleft* *E442*
:to[pleft] {cmd}
                执行 {cmd} 。如果包含一个分割窗口的命令,那么该窗口出现在顶部,
                并且占据最大宽度。当垂直分割窗口时,窗口出现在最左边,并且占据
                最大高度。

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

这些调节符可以结合使用,打开一个垂直分割的并且占据最大高度的窗口,例如:
        :vertical topleft edit tags
在最左边打开一个垂直分割的、最大高度的窗口,用来编辑 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' ,或者改动了缓冲区但是命令里
                用了[!],缓冲区会被隐藏。(除非还有一个窗口在编辑该缓冲区)。
                该命令在下述情况下会失败:                 *E444*
                - 只剩下最后一个窗口的时候。
                - 当 'hidden' 没有设置, 也没有用 [!] ,并且缓冲区也已经被修改,
                  而且也没有其他窗口监视该缓冲区的时候。对缓冲区的改动既不写入
                  文件,也不会丢失,所以这是个“安全”的命令。

CTRL-W CTRL-C                                           *CTRL-W_CTRL-C*
                你可能想用 CTRL-W CTRL-C 关闭当前窗口,但是这不行,因为 CTRL-C
                是用来结束命令的。

                                                        *:hide*
:hid[e]         退出当前窗口,除非这是屏幕上的最后一个窗口。缓冲区被隐藏起来(
                除非还有另一个窗口正在编辑它,或者 'bufhidden' 设置为 "unload"
                或 "delete")。 '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' 选项,那么已经
                更改的缓冲区被写入文件。否则,那些包含被修改过的缓冲区的窗口不
                能被关闭,除非使用 [!] 强制关闭。于是缓冲区转入隐藏状态,对缓
                冲区的改动也不会丢失。


4. 把光标移动到另一个窗口                    *window-move-cursor*

CTRL-W <Down>                                   *CTRL-W_<Down>*
CTRL-W CTRL-J                                   *CTRL-W_CTRL-J* *CTRL-W_j*
CTRL-W j        把光标向下移动 N 个窗口。  用光标的位置在两个窗口之间做出选择。

CTRL-W <Up>                                     *CTRL-W_<Up>*
CTRL-W CTRL-K                                   *CTRL-W_CTRL-K* *CTRL-W_k*
CTRL-W k        把光标向上移动 N 个窗口。  用光标的位置在两个窗口之间做出选择。

CTRL-W <Left>                                   *CTRL-W_<Left>*
CTRL-W CTRL-H                                   *CTRL-W_CTRL-H*
CTRL-W <BS>                                     *CTRL-W_<BS>* *CTRL-W_h*
CTRL-W h        把光标向左移动 N 个窗口。  用光标的位置在两个窗口之间做出选择。

CTRL-W <Right>                                  *CTRL-W_<Right>*
CTRL-W CTRL-L                                   *CTRL-W_CTRL-L* *CTRL-W_l*
CTRL-W l        把光标向左移动 N 个窗口。  用光标的位置在两个窗口之间做出选择。

CTRL-W w                                        *CTRL-W_w* *CTRL-W_CTRL-W*
CTRL-W CTRL-W   如果没有添加计数器,则将光标移动到当前窗口的 右/下方的窗口。如
                果右下方没有窗口,就移动到左上角的窗口。要是添加了计数器,就移
                动到第 N 个窗口(从左上方到右下方依次计数)。

                                                *CTRL-W_W*
CTRL-W W        如果没有添加计数器,则将光标移动到当前窗口的 左/上方的窗口。如
                果左上方没有窗口,就移动到右下角的窗口。要是添加了计数器,就移
                动到第 N 个窗口(从左上方到右下方依次计数)。

CTRL-W t                                        *CTRL-W_t* *CTRL-W_CTRL-T*
CTRL-W CTRL-T   把光标移动到左上角的窗口。

CTRL-W b                                        *CTRL-W_b* *CTRL-W_CTRL-B*
CTRL-W CTRL-B   把光标移动到右下角的窗口。

CTRL-W p                                        *CTRL-W_p* *CTRL-W_CTRL-P*
CTRL-W CTRL-P   移动到前一个(上次访问的)窗口。

                                                *CTRL-W_P* *E441*
CTRL-W P        移动到前一个窗口。如果没有前一个窗口就会出错。
                {如果编译时没有加入 |+quickfix| 则不可用}

在“可视”模式(Visual)下,如果窗口编辑的是同一个缓冲区,则光标所选择的区域会
被保留;如果不是同一个缓冲区,则终止“可视”模式。

                                                *:winc* *:wincmd*
这些命令也可以用 ":wincmd" 来执行:

:[count]winc[md] {arg}CTRL-W [count] {arg} 相同。例如:
                        :wincmd j
               把光标移动到当前窗口下面的窗口。
                这个命令在“正常”状态不可用的时候(比如在 |CursorHold| 自动命
                令执行的时候),或者在启用“正常”状态不方便时,特别好用。


5. 窗口的移动                                      *window-moving*

CTRL-W r                                *CTRL-W_r* *CTRL-W_CTRL-R* *E443*
CTRL-W CTRL-R   向右下方向移动窗口。第一个窗口变成第二个,第二个变成第三个……
                最后一个变成第一个。光标保留在相同窗口里。
                本操作只能移动同行或同列的窗口。

                                                *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| 命令打
                开的。当前窗口和光标的位置都不改变。一个有用的例子:
                        :pedit +/fputc /usr/include/stdio.h

                                                        *:ps* *:psearch*
:[range]ps[earch][!] [count] [/]pattern[/]
                与 |:ijump| 命令很像,只是找到匹配的在预览窗口显示。预览窗口用
                |:ptag| 打开。 当前窗口和光标的位置都不改变。有用的例子:
                        :psearch popen
               这很像 |:ptag| 命令,你可以用它自动显示光标所在单词的相关信息。
                这个命令虽然不如 |:ptag| 用起来爽,但是你可以不使用标记文件,
                并且它也可以找到一些系统的头文件。例如:

  :au! CursorHold *.[ch] nested exe "silent! psearch " . expand("<cword>")
               警告:可能会很慢。

例子                                          *CursorHold-example*

  :au! CursorHold *.[ch] nested exe "silent! ptag " . expand("<cword>")

这条命令以当前光标位置处的关键字为参数,执行 ":ptag" 命令。'updatetime' 指定了
光标停留的时间;"nested" 使得自动命令得以执行,这样可以在预览窗口里启用语法加
亮。"silent!" 屏蔽了在找不到标签时产生的错误信息。也参见 |CursorHold| 。要禁用
此功能:

  :au! CursorHold

另一个比较好用的功能是加亮已经找到的标签,这样可以避免对光标处没有定义的单词执
行 ":ptag",和一些别的东西:

  :au! CursorHold *.[ch] nested call PreviewWord()
  :func PreviewWord()
  :  if &previewwindow                  " 不要在预览窗口里执行
  :    return
  :  endif
  :  let w = expand("<cword>")          " 在当前光标位置抓词
  :  if w != ""                         " 如果该词可以通过 ":ptag" 找到其定义
  :
  :    " 在显示下一个标签之前,删除所有现存的语法加亮
  :    silent! wincmd P                 " 跳转至预览窗口
  :    if &previewwindow                " 如果确实转到了预览窗口……
  :      match none                     " 删除语法加亮
  :      wincmd p                       " 回到原来的窗口
  :    endif
  :
  :    " 显示当前光标处匹配的标签
  :    let v:errmsg = ""
  :    exe "silent! ptag " . w
  :    if v:errmsg =~ "tag not found"
  :      return
  :    endif
  :
  :    silent! wincmd P                 " 跳转至预览窗口
  :    if &previewwindow                " 如果确实转到了预览窗口……
  :      if has("folding")
  :        silent! .foldopen            " 展开折叠的行
  :      endif
  :      call search("$", "b")          " 到前一行的行尾
  :      let w = substitute(w, '\\', '\\\\', "")
  :      call search('\<\V' . w . '\>') " 把光标放置匹配的单词上
  :      " 在此位置对匹配的单词加亮
  :      hi previewWord term=bold ctermbg=green guibg=green
  :      exe 'match previewWord "\%' . line(".") . 'l\%' . col(".") . 'c\k*"'
  :      wincmd p                       " 返回原来的窗口
  :    endif
  :  endif
  :endfun


11. 使用隐藏的缓冲区                            *buffer-hidden*

隐藏的缓冲区已经载入内存,但是不会显示在窗口里。这使得 Vim 每次从一个文件切换
到另一个文件时,不必频繁地读写磁盘。 {若编译时没加入 |+listcmds| ,则不可用}

                                                        *:buffer-!*
如果设置了 'hidden' ('hid') ,那么被丢弃的缓冲区会记忆你在 ":edit", ":next",
":tag",等命令之后进行的所有操作。虽然有时没有设置 'hidden',但是有一些作用于
缓冲区列表的命令还是会把当前窗口变为隐藏。这种情况发生在:当 'autowrite' 选项
是关闭的或者缓冲区不可保存时,你试图用 '!' 强制删除一个修改过的缓冲区窗口。

你可以用任何编辑命令使隐藏的缓冲区不再隐藏。或者用 ":bdelete" 命令将其删除。

'hidden' 是全局选项, 它作用于所有的缓冲区。'bufhidden' 选项可以作用于指定的缓
冲区,该选项可以是下面的值:

        <empty>         使用 'hidden' 的值。
        hide            隐藏该缓冲区,也适合于 'hidden' 没有设置的情况。
        unload          不隐藏,而是卸载该缓冲区,也适合于设置了 'hidden' 的情
                        况。
        delete          删除该缓冲区。

                                                        *hidden-quit*
如果存在一个隐含的,并且被修改过的缓冲区,若此时退出 Vim 会得到一条错误信息,
并且 Vim 会把该缓冲区变为当前的缓冲区。你可以决定是保存(":wq")还是退出(
":q!")。注意:可能不止一个隐藏的并且已被修改的缓冲区!

缓冲区也可能是非列表的(unlisted),这意味着此缓冲区存在,但是从缓冲区列表中看
不到。|unlisted-buffer|


:files[!]                                       *:files*
:buffers[!]                                     *:buffers* *:ls*
:ls[!]          显示所有缓冲区。例如:

                        1 #h  "/test/text"              line 1
                        2u    "asdf"                    line 0
                        3 %l+ "version.c"               line 1

                如果使用了 [!] ,将显示所有的缓冲区,包括非列表的缓冲区。(
                "unlisted" —— “非列表”这一术语有点儿别扭……)。

                每一个缓冲区都有唯一的号码与之对应。这个号码是不会改变的,所以
                你可以一直使用 ":buffer N" 或 "N CTRL-^" (N 是缓冲区号码)来
                选择特定的缓冲区。

                标识符号(同一列上的符号不可能同时出现):
                u       非列表缓冲区(只有使用 [!] 才能看到)|unlisted-buffer|
                 %      当前窗口里的缓冲区
                 #      用 ":e #" 或 CTRL-^ 可切换到该缓冲区
                  a     激活的缓冲区:已载入内存并且可见
                  h     隐藏的缓冲区:已载入内存但是没有窗口显示它
                        |hidden-buffer|
                   -    不可更改的缓冲区,选项 'modifiable' 被关闭。
                    =   只读缓冲区
                    +   被更改的缓冲区

                                                *:bad* *:badd*
:bad[d] [+lnum] {fname}
                在缓冲区列表里添加一个文件名 {fname} ,但是不把该文件载入内存。
                如果指定了 "lnum" ,那么第一次进入缓冲区时,光标会停留在那一行。
                Note  + 后面的其它命令将被忽略。

:[N]bd[elete][!]                                *:bd* *:bdel* *:bdelete*
:bd[elete][!] [N]
                卸载缓冲区 [N] (默认:当前窗口)并且从缓冲区列表里删除该缓冲
                区。如果缓冲区被改动过,那么该命令将失败,除非使用[!] ,但是这
                样所有的改动都会丢失。文件和 Vim 失去联系。打开该文件的所有窗
                口都会关闭。如果缓冲区 [N] 是当前的缓冲区,那么 Vim 会显示另一
                个缓冲区来替代它。Vim 会选择列表中距离最近的一个装入缓冲区。
                实际上,该缓冲区没有被完全从缓冲区列表 |unlisted-buffer|
                里删除。该缓冲区中选项的值、变量、映射和缩略词被清空。

:bdelete[!] {bufname}                                           *E93* *E94*
                类似 ":bdelete[!] [N]",但是使用名字指定缓冲区。
                Note 如果缓冲区名字是数字的,不能用该命令引用;用号码代替。如
                果名字里含有空格,在空格前插入反斜杠。

:bdelete[!] N1 N2 ...
                对缓冲区 N1,N2,……执行 ":bdelete[!]" 。
                参数可以是名字或号码(但是名字里不能含有数字)。
                如果名字里含有空格,在空格前插入反斜杠。

:N,Mbdelete[!]  对 N 号到 M 号(包含 N 和 M )缓冲区执行 ":bdelete[!]"

:[N]bw[ipeout][!]                               *:bw* *:bwipe* *:bwipeout*
:bw[ipeout][!] {bufname}
:N,Mbw[ipeout][!]
:bw[ipeout][!] N1 N2 ...
                类似 ":bdelete",真正删除缓冲区。所有标记失效,选项丢失,等等。
                不要用,除非你知道自己正在做什么。

:[N]bun[load][!]                                        *:bun* *:bunload*
:bun[load][!] [N]
                卸载缓冲区 [N] (默认:当前缓冲区)。原来占用的内存将被释放该
                缓冲区还保留在缓冲区列表里如果缓冲区被改动过,那么该命令将失败,
                除非使用[!] ,但是这样所有的改动都会丢失。如果缓冲区 [N] 是当
                前的缓冲区,那么 Vim 会显示另一个缓冲区来替代它。Vim 会选择列
                表中距离最近的一个装入缓冲区。

:bunload[!] {bufname}
                类似 ":bunload[!] [N]", 但是使用名字指定缓冲区。
                Note 如果缓冲区名字是数字的,不能用该命令引用;用号码代替。如
                果名字里含有空格,在空格前插入反斜杠。

:N,Mbunload[!]  对 N 号到 M 号(包含 N 和 M )缓冲区执行 ":bunload[!]"

:bunload[!] N1 N2 ...
                对缓冲区 N1,N2,……执行 ":bunload[!]" 。
                参数可以是名字或号码(但是名字里不能含有数字)。
                如果名字里含有空格,在空格前插入反斜杠。

:[N]b[uffer][!] [N]                     *:b* *:bu* *:buf* *:buffer* *E86*
                编辑列表中的缓冲区 [N] ,如果没指定 [N] ,就编辑当前的缓冲区。
                对于 [!] 参见 |:buffer-!| 。这个命令同样可以编辑不再列表里的缓
                冲区,而无需设置 'buflisted' 。

:[N]b[uffer][!] {filename}
                编辑列表中的缓冲区 {filename}。对于 [!] 参见 |:buffer-!| 。这
                个命令同样可以编辑不再列表里的缓冲区,而无需设置 'buflisted'
                。

:[N]sb[uffer] [N]                                       *:sb* *:sbuffer*
                分割窗口编辑列表中的缓冲区 [N] ,如果没指定 [N] ,就编辑当前的
                缓冲区。分割窗口的时候要看 'switchbuf' 是不是设置了 "useopen"
                。这个命令同样可以编辑不再列表里的缓冲区,而无需设置
                'buflisted' 。

:[N]sb[uffer] {filename}
                分割窗口编辑列表中的缓冲区 {filename}。这个命令同样可以编辑不
                再列表里的缓冲区,而无需设置 'buflisted' 。

                                                        *:bn* *:bnext* *E87*
:[N]bn[ext][!] [N]
                前进至后面的第 [N] 个缓冲区。  [N] 默认是 1 。如果到了缓冲区列
                表的末尾,则从头循环。对于 [!] 参见 |:buffer-!|
                如果你在帮助文件缓冲区里,这条命令让你跳到下一个帮助缓冲区(如
                果有的话)。同样,你在一个正常(非帮助)缓冲区里,就会使你跳到
                下一个正常缓冲区。这样是为了在打开帮助的时候不会影响到浏览正常
                的代码或文本。下面的命令都是这样。

                                                        *:sbn* *:sbnext*
:[N]sbn[ext] [N]
                分割窗口前进至后面的第 [N] 个缓冲区。
                如果到了缓冲区列表的末尾,则从头循环。使用 'switchbuf'

:[N]bN[ext][!] [N]                      *:bN* *:bNext* *:bp* *:bprevious* *E88*
:[N]bp[revious][!] [N]
                到前面的第 [N] 个缓冲区。  [N] 默认是 1 。
                如果到了缓冲区列表的顶端,则从末尾循环。对于 [!] 参见
                |:buffer-!| 和 'switchbuf' 。

:[N]sbN[ext] [N]                        *:sbN* *:sbNext* *:sbp* *:sbprevious*
:[N]sbp[revious] [N]
                分割窗口并前进到前面的第 [N] 个缓冲区。  [N] 默认是 1 。
                如果到了缓冲区列表的顶端,则从末尾循环。对于 [!] 参见
                |:buffer-!| 和 'switchbuf' 。

                                                        *:br* *:brewind*
:br[ewind][!]
                前进到缓冲区列表中的第一个缓冲区。
                如果列表为空,则转到第一个非列表缓冲区。对于 [!] 参见
                |:buffer-!|

                                                        *:bf* *:bfirst*
:bf[irst        与 ":brewind" 相同。

                                                        *:sbr* *:sbrewind*
:sbr[ewind]     分割窗口并前进到缓冲区列表中的第一个缓冲区。
                如果列表为空,则转到第一个非列表缓冲区。对于 [!] 参见
                |:buffer-!|
                还需考虑 'switchbuf' 选项。

                                                        *:sbf* *:sbfirst*
:sbf[irst]      与 ":sbrewind" 相同。

                                                        *:bl* *:blast*
:bl[ast][!]     前进到缓冲区列表中的最后一个缓冲区。
                如果列表为空,则转到最后一个非列表缓冲区。对于 [!] 参见
                |:buffer-!|
                还需考虑 'switchbuf' 选项。

                                                        *:sbl* *:sblast*
:sbl[ast]       分割窗口并前进到缓冲区列表中的最后一个缓冲区。
                如果列表为空,则转到最后一个非列表缓冲区。对于 [!] 参见
                |:buffer-!|
                还需考虑 'switchbuf' 选项。

:[N]bm[odified][!] [N]                          *:bm* *:bmodified* *E84*
                前进至第 [N] 个修改过的缓冲区。  Note: 这一命令同样也能找到非
                列表缓冲区。如果没有修改的缓冲区,此命令失败。

:[N]sbm[odified] [N]                                    *:sbm* *:sbmodified*
                分割窗口并前进至第 [N] 个修改过的缓冲区。
                还需考虑 'switchbuf' 选项。
                Note: 这个命令也能找到不再列表里的缓冲区。

:[N]unh[ide] [N]                        *:unh* *:unhide* *:sun* *:sunhide*
:[N]sun[hide] [N]
                重新排列窗口,给列表中的每一个载入的缓冲区打开一个窗口。如果设
                置了计数器,则计数器指定的数目为打开窗口的最多数目。

:[N]ba[ll] [N]                                  *:ba* *:ball* *:sba* *:sball*
:[N]sba[ll] [N] 重新排列窗口,给列表中的每一个缓冲区打开一个窗口。如果设置了计
                数器,则计数器指定的数目为打开窗口的最多数目。
                Buf/Win Enter/Leave 不会在新窗口执行,只会在真正进入窗口时才会执行。

Note: 上面所有的命令在编辑另一个缓冲区的时候,总是保持 'readonly' 不变。这和
":edit" 命令不同,它每次都会设置 'readonly' 。


12. 特殊类型的缓冲区                    *special-buffers*

除了用来存放文本,缓冲区也可以用于其它目的。一些选项可以改变缓冲区的行为:
        'bufhidden'     缓冲区不再在窗口里显示
        'buftype'       缓冲区的类型
        'swapfile'      缓冲区是否需要交换文件
        'buflisted'     缓冲区是否在缓冲区列表中出现

有用的缓冲区类型:

quickfix        用来存放错误列表。参见 |:cwindow|。该命令设置 'buftype' 的值为
                "quickfix" 。你不应该修改它。关闭 'swapfile' 。

help            包含帮助文件。只能用 |:help| 命令创建,缓冲区的帮助标志是内置
                的,不能被更改。选项 'buflisted' 在帮助缓冲区里将被重置。

directory       显示目录内容。应用于 |file-explorer| 插件。该缓冲区由一下设置
                创建:
                        :set buftype=nowrite
                        :set bufhidden=delete
                        :set noswapfile
               缓冲区的名字就是目录的名字,并且在使用 |:cd| 命令时会作出相应
                的调整。

scratch         该缓冲区包含的文本可以被随时扔掉。在关闭窗口时,它被保存下来,
                并且必须被明确地删除。
                设置:
                        :set buftype=nofile
                        :set bufhidden=hide
                        :set noswapfile
               缓冲区的名字可以用来标识缓冲区。

                                                *unlisted-buffer*
unlisted        该缓冲区不在缓冲区列表里。它不能用来编辑,但是可以显示帮助文件,
                记录文件名或标记。":bdelete" 命令也会设置这个选项,这样就不会
                完全地删除该缓冲区。设置:
                        :set nobuflisted

 vim:tw=78:fo=tcq2:isk=!-~,^*,^\|,^\":ts=8:ft=help:norl:

Generated by vim2html on Tue Jul 27 00:35:24 CST 2004