Vim中的代碼折疊的方法,除了diff
我都(試圖)用過(guò)贬丛×靡總結(jié)下來(lái)最好用的還是網(wǎng)絡(luò)上大家提及最少的marker
最好用。
-
indent
/syntax
這兩種豺憔,屬于全自動(dòng)额获。看上去好用恭应。但實(shí)際上咪啡,它常常會(huì)在你不想折疊的地方折疊而想折疊的地方它折疊不了(因?yàn)閚esting設(shè)置起來(lái)很矛盾)。它還會(huì)托慢vim的速度暮屡,但這又是另一說(shuō)了。 -
expr
這種毅桃,我只是淺嘗了一下褒纲。純手動(dòng)定義語(yǔ)義來(lái)進(jìn)行折疊。定義一個(gè)完美的折疊方式非常費(fèi)事钥飞,但定義完了就是全自動(dòng)莺掠。我也懶得深究。 -
manual
读宙。在此之前是我用的最久的折疊方式彻秆。好處是你可以自己選取自己想要的段落用zf
就可以永久自定義一個(gè)折疊區(qū)了。刪除光標(biāo)所在的折疊區(qū)用zd
结闸,遞歸刪除zD
唇兑,全文刪除折疊區(qū)zE
。在問(wèn)題在于桦锄,它記錄折疊區(qū)域的方式有問(wèn)題扎附。一旦我在文中有增減行數(shù)的行為,我修改處以下的所有折疊區(qū)都會(huì)亂(Vim估計(jì)是用的行號(hào)來(lái)記錄的)结耀。
而marker
其實(shí)就是一個(gè)用戶顯式定義折疊區(qū)邊際的manual
模式留夜。如果說(shuō)manual
是vim在后臺(tái)記錄行數(shù)來(lái)確定折疊區(qū)起始和結(jié)束位置。marker
就是在文章/代碼中用可見(jiàn)字符來(lái)標(biāo)記图甜。這個(gè)可見(jiàn)字符就是{{{n
和}}}n
(其中n
是一個(gè)代表foldlevel`的整數(shù)碍粥,可在嵌套折疊時(shí)使用,如果使用得當(dāng)忽略這個(gè)也沒(méi)什么問(wèn)題)黑毅。
因?yàn)檫@種折疊自己可以顯式定義邊界嚼摩,就不會(huì)出現(xiàn)manual
模式下那樣修改上文打亂下文折疊的局面。
另外低斋,marker
模式也是可以使用折疊快捷鍵的蜂厅。
zf
創(chuàng)建折疊區(qū)。它會(huì)自動(dòng)在你選擇的區(qū)域在起始和結(jié)束的地方加上{{{
和}}}
膊畴。
- 如果是Vim認(rèn)識(shí)的
filetype
的話掘猿,它還會(huì)自動(dòng)注釋這寫(xiě)折疊標(biāo)記。 - 它不會(huì)用
{{{
把折疊起始行的內(nèi)容框進(jìn)去唇跨,而是在起始行行末添加標(biāo)記稠通。這樣你起始行的的內(nèi)容就會(huì)成為折疊區(qū)的“標(biāo)題”。方便瀏覽全文买猖。
比如改橘,為func1函數(shù)定義做折疊的話:
// 原文
int func1() {
return 1;
}
// 選取func1,包含函數(shù)上下各一個(gè)空行,然后zf
/*{{{*/
int func1() {
return 1;
}
/*}}}*/
// 只選取func1,不包含空行玉控,然后zf
int func1() {/*{{{*/
return a;
} /*}}}*/
// 如果func1上有注釋?zhuān)炎⑨屢部蜻x飞主,然后zf
// returns 1{{{
int func1() {
return a;
} /*}}}*/
所有的折疊標(biāo)記,只需要使用zE
或zd
或其他刪除折疊區(qū)的快件鍵就可以刪的不留痕跡高诺。所以不用擔(dān)心把代碼分享給使用其他編輯器的同事時(shí)被唾棄碌识。