1. 程式人生 > >關於vim的摺疊

關於vim的摺疊

參考: http://www.cnblogs.com/fakis/archive/2011/04/14/2016213.html 和 這篇文章: https://blog.csdn.net/bendanban/article/details/7743530
這篇文章的內容全是 上面 兩篇文章中的內容!

發現可以使用命令模式:開始行號,結束行號folder命令就可以摺疊了,

同樣多行縮排可以使用:110,120>來將110行到120行縮排

VIM設定程式碼摺疊

今天看了一下別人寫的程式的原始碼,發現是用vim寫的,程式碼中有趣是用vim來摺疊程式碼,一開始我以為是用外掛的,後來上網查了查,得出以下使用方面的技巧。

  1. 摺疊方式

可用選項來設定摺疊方式:

可在Vim 配置檔案中設定 set fdm=XXX
可直接在檔案中使用註釋呼叫vim命令 /* vim: set fdm=XXX: */

有6種方法來選定摺疊:
manual 手工定義摺疊
expr 用表示式來定義摺疊
syntax 用語法高亮來定義摺疊
diff 對沒有更改的文字進行摺疊

indent 更多的縮排表示更高級別的摺疊
marker 對文中的標誌摺疊

注意,每一種摺疊方式不相容,如不能既用expr又用marker方式,我主要輪流使用indent和marker方式進行摺疊。

使用時,用 set fdm=marker 命令來設定成marker摺疊方式(fdm是foldmethod的縮寫)。
要使每次開啟vim時摺疊都生效,則在.vimrc檔案中新增設定,如新增:set fdm=syntax,就像新增其它的初始化設定一樣。

  1. 摺疊命令

選取了摺疊方式後,我們就可以對某些程式碼實施我們需要的摺疊了,由於我使用indent和marker稍微多一些,故以它們的使用為例:如果使用了indent方式,vim會自動的對大括號的中間部分進行摺疊,我們可以直接使用這些現成的摺疊成果。


要注意, indent和 marker建立 摺疊的方式和方法 命令 是不同的! 並不都是 zc zC zo zO , 對於 marker方式的摺疊, 建立方法的關鍵字是 zf, 這裡的zf相當於 一個 命令關鍵字, 類似 於 dd, yy等的, 所以 必須 要結合 行數 的 範圍 來 使用, 單單的使用 zf 其實 只會 摺疊 緊挨著 的 兩行!

要理解 摺疊範圍 的 概念: 對於 indent來說, 最高一級的內容不會被摺疊! 最高一級的內容, 相當於 摺疊包裹上的標識文字, 相當於 摺疊 文章 的 文章標題一樣, 不然 最高一級的內容都摺疊了, 那 當前摺疊裡面究竟是什麼 也就不會知道了, 所以 : 摺疊範圍總是 從 第二層 開始的! 那麼相應的命令 zc, zo, 跳轉命令 [z, ]z等都是 針對 這個摺疊範圍 而言的, 不是 針對 最高一級來說的.

同樣的, 對於 marker方式的 摺疊, 最高一級的 內容 是指 括號 所在的 行 比如 {, (, [, < 等 和它們相對應的 結尾行 , 摺疊範圍 就是 這些 括號 中 包含的內容, 但是, 不包括 括號 所在的 行!!

在可摺疊處(大括號中間):
zc 摺疊
zC 對所在範圍內()所有巢狀的摺疊點進行摺疊
zo 展開摺疊
zO 對所在範圍內所有巢狀的摺疊點展開
[z 到當前開啟的摺疊的開始處。]z 到當前開啟的摺疊的末尾處。
zj 向下移動。到達下一個摺疊的開始處。關閉的摺疊也被計入。
zk 向上移動到前一折疊的結束處。關閉的摺疊也被計入。

當使用marker方式時,需要用標計來標識程式碼的摺疊,系統預設是{{{和}}},最好不要改動

我們可以使用下面的命令來建立和刪除摺疊:

zf 建立摺疊,比如在marker方式下: /// 必須跟 範圍 !!!
zf56G,建立從當前行起到56行的程式碼摺疊;
10zf或10zf+或zf10↓,建立從當前行起到後10行的程式碼摺疊。
10zf-或zf10↑,建立從當前行起到之前10行的程式碼摺疊。
在括號處zf%,建立從當前行起到對應的匹配的括號上去((),{},[],<>等)。

zd 刪除 (delete) 在游標下的摺疊。
僅當 'foldmethod' 設為 "manual" 或 "marker" 時有效。

zD 迴圈刪除 (Delete) 游標下的摺疊,即巢狀刪除摺疊。
僅當 'foldmethod' 設為 "manual" 或 "marker" 時有效。

zE 除去 (Eliminate) 窗口裡“所有”的摺疊。
僅當 'foldmethod' 設為 "manual" 或 "marker" 時有效。