本節所用命令的幫助入口:
:help mksession
:help 'sessionoptions'
:help source
:help wviminfo
:help rviminfo
:help 'viminfo
很多軟件都具有這樣一種功能:在你下一次啟動該軟件時,它會自動為你恢復到你上次退出的環境,恢復窗口布局、所打開的文件,甚至是上次的設置。
那么,VIM有沒有這種功能呢?
答案當然是肯定的!這需要使用VIM的會話(session)及viminfo的保存和恢復功能。
這里所說的會話和viminfo,包括了你在本次使用VIM過程中的編輯環境,VIM可以把這個編輯環境保存下來,然后你在下次啟動VIM后,可以再恢復回這個環境。我們在開發軟件項目時,其周期不是一兩天。如果你在中途退出了VIM而不能恢復原先的編輯環境的話,你又要重新打開你所打開的文件,重新定義你的映射、縮寫,重新定位你所設定的標記的位置,重新設置項目相關設置……不是一般的麻煩!
要恢復上次的編輯環境,我們需要保存兩種不同的信息,一種是會話信息,另外一種是viminfo信息。
- 會話信息中保存了所有窗口的視圖,外加全局設置。
- viminfo信息中保存了命令行歷史、搜索字符串歷史、輸入行歷史、非空的寄存器內容、文件的位置標記、最近搜索/替換的模式、緩沖區列表、全局變量等信息。
我們在下面分別對其進行介紹。
[會話]
我們可以使用”
:mksession [file]”命令來創建一個會話文件,如果省略文件名的話,會自動創建一個名為Session.vim的會話文件。會話文件,其本質上是一個VIM腳本,你可以使用上述命令生成一個會話文件,然后再查看其中的內容,就會對會話文件有一個深入的認識。
會話文件中保存哪些信息,是由
'sessionoptions'選項決定的。缺省的
'sessionoptions'選項包括"blank,buffers,curdir,folds,help,options,tabpages,winsize",意為會話文件會恢復當前編輯環境的空窗口、所有的緩沖區、當前目錄、折疊相關的信息、幫助窗口、所有的選項和映射、所有的標簽頁、窗口大小。
如果你使用windows上的VIM,并且希望你的會話文件可以同時被windows版本的VIM和UNIX版本的VIM共同使用的話,在
'sessionoptions'中加入
'slash'和'
unix',前者把文件名中的’\’替換為’/’,后者會把會話文件的換行符保存成unix格式。
如果你不希望在會話中保存當前路徑,而是希望會話文件所在的目錄自動成為當前工作目錄,那么,需要在
'sessionoptions'去掉
'curdir',加入
'sesdir',這樣每次載入會話文件時,這個文件所在的目錄,就被設為VIM的當前工作目錄。在你通過網絡訪問其它項目時,或者你的項目有多個不同版本(位于不同的目錄),而你想始終使用一個會話文件時,這個選項比較有用:你只需要把會話文件拷貝到不同的目錄,然后使用就可以了。會話文件中保存的是文件的相對路徑,而不是絕對路徑。
我們在上面使用
”:mksession”命令創建了會話文件,那么怎么使用會話文件恢復編輯環境呢?很簡單,你只需要使用
”source {file}”來導入會話文件。因為會話文件是一個腳本,里面保存的是Ex命令,所以
”source”命令只是把會話文件中的Ex命令執行一遍。
[viminfo]
使用”:
wviminfo [file]”命令,可以手動創建一個viminfo文件。
其實,在VIM退出時,每次都會保存一個.viminfo文件在用戶的主目錄。我們使用”
:wviminfo”命令則是手動創建一個viminfo文件,因為缺省的.viminfo文件會在每次退出VIM時自動更新,誰知道你在關閉當前軟件項目后,又使用VIM做過些什么呢?這樣的話,.viminfo中的信息,也許就與你所進行的軟件項目無關了。還是手動保存一個保險。
”
:wviminfo”命令保存哪些內容,以及保存的數目,由'
viminfo'選項決定,這個選項的值在windows上和在linux上的缺省值不同,具體含義參閱手冊。
要讀入你所保存的viminfo文件,使用”
:rviminfo [file]”命令。
現在,回到我們的例子,依舊是上篇文章中的抓圖,先看一下我們當前目錄,執行”
:pwd”,顯示“
/home/easwy/src/vim70”,接下來,執行下面的命令:
:cd src '切換到/home/easwy/src/vim70/src目錄
:set sessionoptions-=curdir '在session option中去掉curdir
:set sessionoptions+=sesdir '在session option中加入sesdir
:mksession vim70.vim '創建一個會話文件
:wviminfo vim70.viminfo '創建一個viminfo文件
:qa '退出vim
退出vim后,在命令行下執行“
gvim &”,再次進入VIM,這時看到的是一個空白窗口。然后執行下面的命令:
:source ~/src/vim70/src/vim70.vim '載入會話文件
:rviminfo vim70.viminfo '讀入viminfo文件
太棒了,又恢復到昨天退出時的狀態了!繼續工作~~~~