【轉】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°選項.