Vimscript 基本折疊

2018-02-24 16:03 更新

如果從未在Vim里使用過代碼折疊,你不知道你都錯(cuò)過了什么。 閱讀:help usr_28并花費(fèi)時(shí)間在日常工作中使用它。 一旦到了銘記于指的程度,你就可以繼續(xù)本章了。

折疊類型

Vim支持六種不同的決定如何折疊你的文本的折疊類型。

Manual

你手動(dòng)創(chuàng)建折疊并且折疊將被Vim儲(chǔ)存在內(nèi)存中。 當(dāng)你關(guān)閉Vim時(shí),它們也將一并煙消云散,而下次你編輯文件時(shí)將不得不重新創(chuàng)建。

在你把它跟一些自定義的創(chuàng)建折疊的映射結(jié)合起來時(shí),這種方式會(huì)很方便。 在本書中,我們不會(huì)這么做,但當(dāng)你想這么做的時(shí)候,它會(huì)幫上忙。

Marker

Vim基于特定的字符組合折疊你的代碼。

這些字符通常放置于注釋中(比如// {{{), 不過在有些語(yǔ)言里,你可以使用該語(yǔ)言自己的語(yǔ)法代替,比如javascript的{}。

純粹為了你的編輯器,用注釋割裂你的代碼看上去有點(diǎn)丑,但好處是你可以定制特定的折疊。 如果你想以特定的方式組織一個(gè)大文件,這個(gè)類型將是非常棒的選擇。

Diff

在diff文件時(shí)使用該特定的折疊類型。我們不會(huì)討論它,因?yàn)閂im會(huì)自動(dòng)使用它。

Expr

這讓你可以用自定義的Vimscript來決定折疊的位置。它是最為強(qiáng)大的方式,不過也需要最繁重的工作。 下一章我們將講到它。

Indent

Vim使用你的代碼的縮進(jìn)來折疊。同樣縮進(jìn)等級(jí)的代碼折疊到一塊,空行則被折疊到周圍的行一起去。

這是最便捷的方式,因?yàn)槟愕拇a已經(jīng)縮進(jìn)過了;你僅僅需要啟動(dòng)它。 這將是我們用來折疊Potion代碼的第一種方式。

Potion折疊

讓我們?cè)僖淮慰匆幌翽otion實(shí)例代碼:

factorial = (n):
    total = 1
    n to 1 (i):
        total *= i.
    total.

10 times (i):
    i string print
    '! is: ' print
    factorial (i) string print
    "\n" print.

函數(shù)體和循環(huán)體已經(jīng)縮進(jìn)好了。這意味著我們可以不怎么費(fèi)力就能實(shí)現(xiàn)一些基本的縮進(jìn)。

在我們開始之前,在total *= i上添加一個(gè)注釋,這樣我們就有一個(gè)供測(cè)試的多行內(nèi)部塊。 你將在做練習(xí)的時(shí)候?qū)W到為什么我們需要這么做,但暫時(shí)先信任我。現(xiàn)在文件看上去就像這樣:

factorial = (n):
    total = 1
    n to 1 (i):
        # Multiply the running total.
        total *= i.
    total.

10 times (i):
    i string print
    '! is: ' print
    factorial (i) string print
    "\n" print.

在你的Potion插件的版本庫(kù)下創(chuàng)建一個(gè)ftplugin文件夾,然后在里面創(chuàng)建一個(gè)potion文件夾。 最后,在_potion文件夾_里面創(chuàng)建一個(gè)folding.vim文件。

不要忘了每次Vim設(shè)置一個(gè)buffer的filetypepotion時(shí),它都會(huì)執(zhí)行這個(gè)文件中的代碼。 (因?yàn)樗挥谝粋€(gè)叫potion的文件夾)

將所有的折疊相關(guān)的代碼放在同一個(gè)文件顯然是一個(gè)好主意,它能幫我們維護(hù)我們的插件的繁多的功能。

在這個(gè)文件中加入下面一行:

setlocal foldmethod=indent

關(guān)閉Vim,重新打開factoria.pn。用zR,zMza嘗試折疊功能。

一行Vimscript代碼就能帶來一些有用的折疊!這真是太酷了!

你可能注意到factorial函數(shù)的內(nèi)循環(huán)里面的那幾行不能折疊,盡管它們縮進(jìn)了。 為什么會(huì)這樣?

事實(shí)上,在使用indent折疊時(shí),Vim默認(rèn)忽略以#字符開頭的行。 這在編輯C文件時(shí)很有用(這時(shí)#表示一個(gè)預(yù)編譯指令),但在編輯其他文件時(shí)不怎么有意義。

讓我們?cè)?code>ftplugin/potion/folding.vim中添加多一行來修復(fù)問題:

setlocal foldmethod=indent
setlocal foldignore=

關(guān)閉并重新打開factorial.pn,現(xiàn)在內(nèi)部塊可以正常地折疊了。

練習(xí)

閱讀:help foldmethod.

閱讀:help fold-manual.

閱讀:help fold-marker:help foldmarker.

閱讀:help fold-indent.

閱讀:help fdl:help foldlevelstart.

閱讀:help foldminlines.

閱讀:help foldignore.

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)