2009/02/10

打造自己的VIM: Folding


對於比較多行的程式,有時候源碼褶疊能隱藏函式或結構的定義,而只顯示函式的宣告,下圖是源碼折疊的一個簡單例子。



在VIM中,源碼折疊可以分成多種方法,我這裡只簡單介紹我會用到的幾種折疊方式,隨後會再介紹跟程式折疊有關的指令。本篇文章共參考到2份VIM document,分別為[user_28]及[fold]

折疊方式

我常用的折疊方式有3種,第1為syntax,簡單的說就是根據語言讓VIM幫你自動折疊程式,我大都使用這種。第2種為marker,很多VIM的script(plugin)都會採用這種,它是根據使用者在文檔中加入的特殊符號來折疊,VIM預設是用"{{{"及"}}}"來作為標示,並且為了讓這種標示不影響程式/文檔運行,通常這些標示會放在註解內,我們看一下下面2個例子。



這個例子太簡單,相信大家看一下就懂。而底下的另一個例子則在標示後面增加了一個號碼來說明這是第幾層的折疊



Mark這種折疊方式,我通常是用在整理某些特殊的比較沒有規則的文檔。

第三種折疊方式為為indent,這是根據縮排來折疊,這種折疊方式用在python這種程式,特別好用。

設置折疊的方式為foldmethod這個option

:set foldmethod=syntax

你可以把它加在vimrc裡,如果你常需要折疊功能的話。若你是像我一樣,偶爾用它,那就等文檔打開後再輸入這個指令,但這個指令也太長了,所以它有縮寫,像是上面的例可以取代成

:set fdm=syntax

此外,我比較常用的option為有這幾個foldnestmax(fdn)及foldcolumn(fdc)。foldnestmax它會限制最多折疊幾層,畢竟有時折疊太多層也很煩人,如下面這個指令它最多會折疊3種。

set foldnestmax=3

foldcolumn這個option則是設定在VIM最左邊預留一塊foldcolumn的空間顯示折疊情形,如下圖。




常用指令

zi      "啟用/關閉折疊

zo      "打開折疊
zc      "關閉折疊
zO      "打開所有折疊
zC      "關閉所有折疊

zx      "更新折壘,即除了游標所在折疊不關,其他都關掉




No comments: