WINDOWS

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


                  VIM 參考手冊    作者:Bram Moolenaar
                                  翻譯:Dasn<dasn@users.sf.net>
                                  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 Thu Dec 9 14:14:27 CST 2004