2015年7月12日 星期日

VIM: Buffers vs Tabs

Vim在7.0開始的分頁(Tabs)功能對於依靠直覺使用工具的人來說應該不難理解,就像Firefox、Chrome、Ultraedit之類上的應用一般,開一個新檔案就開一個新頁籤(tab)去放,
 一個tab一個檔案,很清楚。

但是對於老用戶如我來說,新出現的分頁功能要我照Windows下的慣用用法來用實在是有夠彆扭,因為Vim本來就有運作良好的buffer機制可以進行多檔編輯,
交互參考還可以搭配vs(plit)開兩個視窗來做,chrome上的分頁用法套在這裡貌似不太適用。

事實上Vim的頁籤功能原本的設計意圖的確不是這樣用,開始說明之前先回顧一下Vim的buffer與window:

Vim所謂的buffer,指的就是編輯中的文檔(Text),有一個比較傳神的形容叫做instance of file,
當Vim打開一個檔案要編輯的時候,他事實上是將整個檔案讀到記憶體中的一塊空間,
我們編輯的是記憶體裡的副本,因此改完了要:w寫回去,
而當Vim同時編輯兩個檔案的時候,所作的就是將第二個檔案讀到另一塊記憶體的空間中,我們隨後可以使用bnext/bprev在兩管buffer中切換。

而 Vim中的window指的是一種顯示buffer內容的方法,是"任何"buffer,一次一個,
當我們正在編輯一個檔案,我們可以split開啟另一 個window,此時另一個window顯示的還是原本在編輯的buffer,
隨後我們bnext切換到另一個buffer,前面提到的交互參考就做出來 了。

以上是buffer與window,根據Vim的文件,buffer、window與tab的定義是這樣:
buffer: the in-memory text of a file.
window: viewpoint of a buffer.
tab: a collection of windows.

來 做個實驗,我們打開兩個檔案,使用垂直分割讓他們能同時顯示,然後:tabnew開一個新的tab,這次水平分割兩個window讓他們讀進方才的兩個檔 案,:tabnext來回切換tab, 
你會發現tab就真的只是讓window以不同形式layout,他們事實上還是共用同一組buffers。

具 體上tab的用法其實也就是這樣,讓你可以切換不同的layout,可以一個tab開啟.c與.h做交互參照,然後另外一個tab單開.c檔專心做編輯,
也可以一個tab編輯一個專案,另一個tab分開另一個專案,當然要一個tab開一個不同的檔案還是可以的,只是我會說那不是原本設計的意圖 (intention)。

沒有留言:

張貼留言