Vimscript 基本折疊

2018-02-24 16:03 更新

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

折疊類型

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

Manual

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

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

Marker

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

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

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

Diff

在diff文件時使用該特定的折疊類型。我們不會討論它,因為Vim會自動使用它。

Expr

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

Indent

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

這是最便捷的方式,因為你的代碼已經(jīng)縮進過了;你僅僅需要啟動它。 這將是我們用來折疊Potion代碼的第一種方式。

Potion折疊

讓我們再一次看一下Potion實例代碼:

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)縮進好了。這意味著我們可以不怎么費力就能實現(xiàn)一些基本的縮進。

在我們開始之前,在total *= i上添加一個注釋,這樣我們就有一個供測試的多行內(nèi)部塊。 你將在做練習的時候學到為什么我們需要這么做,但暫時先信任我。現(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插件的版本庫下創(chuàng)建一個ftplugin文件夾,然后在里面創(chuàng)建一個potion文件夾。 最后,在_potion文件夾_里面創(chuàng)建一個folding.vim文件。

不要忘了每次Vim設置一個buffer的filetypepotion時,它都會執(zhí)行這個文件中的代碼。 (因為它位于一個叫potion的文件夾)

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

在這個文件中加入下面一行:

setlocal foldmethod=indent

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

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

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

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

讓我們在ftplugin/potion/folding.vim中添加多一行來修復問題:

setlocal foldmethod=indent
setlocal foldignore=

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

練習

閱讀:help foldmethod.

閱讀:help fold-manual.

閱讀:help fold-marker:help foldmarker.

閱讀:help fold-indent.

閱讀:help fdl:help foldlevelstart.

閱讀:help foldminlines.

閱讀:help foldignore.

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號