1. 程式人生 > >【轉】VIM-如何刪除緩衝區?

【轉】VIM-如何刪除緩衝區?

先來實在的,個人用法:

1、:ls   列出所有緩衝區

2、:bdelete #numb     刪除所要關閉的緩衝區

以下為 VIM 手冊中的描述:

Vim編輯器使用緩衝區這個詞來描述被編輯的檔案. 事實上, 一個緩

衝區是一個被編輯檔案的副本. 通常你會在完成對一個緩衝區的編輯後儲存該檔案. 緩衝區不僅包含了檔案的內容, 它也記錄了該緩衝區中所有的標記, 設定以及其它跟緩衝區有關的東西.

隱藏緩衝區

假設你正在編輯檔案"one.txt"現在需要轉而編輯"two.txt". 你可

能會直接使用":edit two.txt"命令, 但是你已經對"one.txt"作出了改動, 所以這一命令會失敗, 同時你又不希望現在就儲存檔案"one.txt"的內容. Vim對此的解決方案是:

:hide edit two.txt

緩衝區"one.txt"從螢幕上消失, 但Vim儲存了它的當前狀態. 這叫

做隱藏緩衝區: 緩衝區中確有內容但你看不到它.

":hide"命令的引數是另一個命令. 它使該命令工作於°hidden° 選項被設定的狀態. 你也可以自行設定該選項. 其效果是當你的緩衝區看似被丟棄時, 它實際上只是隱藏了起來2

1譯: 還記得嗎? 想垂直分隔視窗的話可以用:vertical sfind

2譯: 規律: hide與vertical都是這樣的特殊命令, 它們以一個完整的命令作為引數, 只是以一種方式影響該命令的執行, 同時此類命令並非對所有命令都有效, 它只對那些涉及其影響效果的命令起使用, 如vertical命令只是影響新開視窗的佈局, 是水平的還是垂直的.這樣它對那些根本不會開啟視窗的命令就形同虛設

小心! 如果你當前有一些被修改內容尚未儲存的隱藏緩衝區時, 不

要草草地退出Vim 1

非活動緩衝區

一旦一個緩衝區曾被編輯過, Vim就會記下它的一些資訊. 這樣當它

不顯示在視窗中並且又不是一個隱藏緩衝區時, 它還是會被保留在緩衝區列表中. 這叫非活動緩衝區. 緩衝區的大致類別如下:

Active 出現在視窗中, 內容被載入

Hidden 不顯示在視窗中, 但內容被載入

Inactive 不出現在視窗中, 內容也未被載入

非活動緩衝區仍被記錄在案, 因為Vim保留了它的相關資訊, 比如在

其中定義的標記和它的檔名. 這樣你可以看到曾經編輯過了哪些檔案,也可以再次開啟它們.

顯示緩衝區列表

下面的命令可以列出整個緩衝區列表:

:buffers

命令

:ls

與:buffers完全相同, 只是看起來沒那麼顧名思義, 它的優點是命令本身

很短2 結果形如:

1 #h "help.txt" line 62

2 %l+ "usr_21.txt" line 1

3 "usr_toc.txt" line 1

第一列是緩衝區編號. 你可以在編輯該檔案時以此代替檔名, 見下文. 緩衝區編號之後是緩衝區型別標誌字元. 然後是檔名和上次退出時游標所在的行號. 可能的緩衝區型別標誌字元如下(從左到右):

1譯: 真要這樣退出時Vim還是會提醒你有緩衝區的內容已被改變但尚未儲存, 除非你

宣告自己負全責: :qa! 或:wqa

2譯: (1)ls之於ls就象:grep之於grep, 完全不同! (2)Vim中有很多這樣的折衷, 以較短的命令換取更具描述性的命令名

u 未被列出的緩衝區|unlisted-buffer|[[譯: 既然未被列出你又怎麼知道? :ls! % 當前緩衝區

# 上一次的活動緩衝區

l 被載入並顯示在某視窗中的緩衝區

h 被載入但隱藏的緩衝區.

= 只讀的緩衝區

- 不可編輯的緩衝區, 其中°modifiable°選項被關閉

+ 有改動的緩衝區

編輯一個緩衝區

你可以以緩衝區編號指定要編輯的緩衝區. 這可以免於鍵入其檔案

名:

:buffer 2

但是要知道緩衝區編輯的唯一辦法就是查詢緩衝區列表. 這本身需要執行另一個命令. 你可以用檔名或部分檔名1:

:buffer help

Vim會根據鍵入的部分檔名選擇一個最為相近的緩衝區. 如果只有

一個緩衝區符合條件, 就那直接使用該緩衝區, 本例是"help.txt".

要在一個新視窗中開啟一個緩衝區使用命令:

:sbuffer 3

當然這一命令也可以使用檔名.

使用緩衝區列表

你可以用下面的命令來遍歷整個緩衝區列表:

:bnext 跳轉到下一個緩衝區

:bprevious 跳轉到前一個緩衝區

:bfirst 跳轉到第一個緩衝區

:blast 跳轉到最後一個緩衝區

1譯: 可以看作Vim自動進行了命令補齊, 此時的命令補齊並不要求已經鍵入的檔名

一定是最終檔名的開頭字元, 如對於檔案filename.txt, 你可以鍵name然後使用命令補齊, 但同樣也可以不用命令補齊, Vim根據鍵入的部分檔名選擇一個最相近的緩衝區

要把一個緩衝區從列表中去除, 可以用命令:

:bdelete 3

同樣, 可以使用檔名1.

如果被刪除的緩衝區是活動緩衝區(也就是說被顯示在另一口), 它

所在的視窗就會被關閉. 如果你刪除的是當前緩衝區, 它所在的視窗也會被關閉. 如果它是最後一個視窗. Vim就會另找一個緩衝區顯示在該

視窗中. 總不至於讓你因此什麼都沒得編輯.

備註: 即使是用":bdelete"命令刪除了一個緩衝區Vim還

是會記住它. 實際上它被打入"unlisted"列表中,

不再顯示在":buffers"命令顯示的緩衝區列表中.

但":buffers!"還是會讓它再度現身(是的, Vim可以完成Misson Impossible). 要徹底清除一個緩衝區, 要使

用":bwipe". 同時請參考°buflisted°選項.