Vim 中 Buffer, Session, Tab 的不同

我是一個Vim初學者,初學者在開始能夠順利操作Vim的時候都會有一點點成就感,當你可以順利移動、順利存檔、順利的讓你用Vim寫的程式會動,應該就可以算是順利操作Vim了。

但是你有沒有覺得,Vim每次都要編輯、存檔、離開、開檔、編輯這樣的Loop很煩,檢視一下整個流程,我們應該可以把離開、開檔這個流程省下來,直接在Vim裡面開起來編輯存檔,再開別的檔再編輯,這樣應該會順很多,有這種想法就對了。我們來看一下Vim的Buffer、Session、Tab吧!

Buffer

Vim的buffer有點玄,有老外說這樣了解他最適合

buffer is an open instance of a file

也就說他是個檔案打開後的實體,但是這樣還是很抽象啊,沒關係繼續看下去,buffer打開以後,他在目前的Vim視窗不一定會被看見,但是你可以迅速的切換過去,同時你每次打開一個檔案,其實就是把一個檔案放在Buffer裡面。

在buffer裡面,如果你當前的檔案修改完以後,沒有存檔想要跳到另外一個buffer,那Vim就會出現警告訊息,這個可以”set hidden”選項來解決,修改成離開vim的時候提示。

1
2
3
4
5
6
7
8
# add file into buffer list
:badd fileName;

# list all file in buffer list
:ls

# Go to nth buffer
:b n

Session

Vim的session可以記住當前的工作狀態,咦,這個和buffer不是有點異曲同工嗎?其實是有一點點像的,但是session可以永久的記錄,session可以把目前的Windows以及Tab都記下來,和buffer不太一樣。

1
2
3
4
5
6
7
8
# Make a session in file
:mksession <fileName>

# Force rewrite (save) session in file
:mksession! <fileName>

# Open a sessionfile in vim
vim -S <fileName>

Tab

如果我們以前用Notepad++就會把一個Tab去對應一個File,然後用切換Tab的方式來切換File,在Vim裡面Tab其實可以裝多個File在裡面,一個Tab可以視為一個單一的Vim,有了這個Tab我們可以切換多個Vim的感覺。

有老外用Viewport或是layout來形容一個Tab,這樣是比較貼切的,而Tab之間開的檔案都會進到Buffer list,所以可以透過buffer來共享tab開的所有檔案。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Open file in new tab
:tabe <fileName>

# close tab
:tabc

# close other tabs
:tabo

# go to next tab
:tabn

# go to prev tab
:tabp

Conclution

那這幾個東西到底要怎麼運用才會順呢?目前來說,我自己是以buffer為主,記錄session為輔,接下來會增加自動記錄Session目前的狀況,也就是每當有buffer被寫入的時候就強迫將目前的session寫入特定檔案,避免忘記save session。

同時未來若有需要多視窗共同編輯的需求,再考慮來引入Tab和Windows的可能。