1. 程式人生 > 實用技巧 >vim 中程式碼的摺疊和開啟

vim 中程式碼的摺疊和開啟

# vim 中程式碼的摺疊和開啟

reference:

前言

在檢視程式碼的時候,如果程式碼十分冗長,尤其是c/c++系列的時候,程式碼結構比較讓人難以理清,主要是各種註釋、括號的匹配問題。

雖然可以用%來檢視匹配的另外一半符號在哪裡,但是如果這一對符號之間的程式碼超過了一頁,甚至好幾頁的話,那麼也是比較難以理解的。

於是可以使用這個vim所提供的摺疊功能來簡化這些分析。

摺疊的方式:

方式 意義
manual 手工定義摺疊
indent 更多的縮排表示更高級別的摺疊
expr 用表示式來定義摺疊
syntax 用語法高亮來定義摺疊
diff 對沒有更改的文字進行摺疊
marker 對文中的標誌摺疊

用法

配置:

可用選項 foldmethod 來設定摺疊方式:set fdm=*

注意,每一種摺疊方式不相容,即:你不能用expr又用marker方式。

set fdm=indent "設定成marker摺疊方式

Vim將摺疊等同於行來對待——你可以使用j或k命令,移動跳過包含多行的整個摺疊;也可以使用y或d命令,複製或刪除某個摺疊。

通常在摺疊處向左或向右移動游標,或者進入插入模式,都將會自動開啟摺疊。我們也可以使用以下命令定義快捷鍵,使用空格鍵關閉當前開啟的摺疊,或者開啟當前關閉的摺疊。

:nnoremap <space> za

摺疊開啟與摺合

選取了摺疊方式後,我們就可以對某些程式碼實施我們需要的摺疊了。

如果使用了indent方式,vim會自動的對大括號的中間部分進行摺疊,我們可以直接使用這些現成的摺疊成果。

indent 對應的摺疊命令有:

使用時在大括號中間輸入命令。

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

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

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

  • zf 建立摺疊,比如在marker方式下:
zf56G,建立從當前行起到56行的程式碼摺疊;
10zf或10zf+或zf10↓,建立從當前行起到後10行的程式碼摺疊。
10zf-或zf10↑,建立從當前行起到之前10行的程式碼摺疊。
在括號處zf%,建立從當前行起到對應的匹配的括號上去((),{},[],等)。
  • zd 刪除 (delete) 在游標下的摺疊。僅當 foldmethod 設為 manualmarker時有效。
  • zD 迴圈刪除 (Delete) 游標下的摺疊,即巢狀刪除摺疊。僅當 foldmethod 設為 manualmarker時有效。
  • zE 除去 (Eliminate) 窗口裡“所有”的摺疊。僅當 foldmethod 設為 manualmarker時有效。

當我們檢視很長的文字時(比如程式程式碼),可以使用:set foldenable命令來啟動摺疊。首先將內容按照其結構摺疊起來,檢視檔案的大綱,然後再針對待定的行展開摺疊,顯示文字的詳細內容。

Manual Fold

使用以下命令,啟用手工摺疊。

:set foldmethod=manual

在視覺化模式下,使用以下命令,將摺疊選中的文字:

zf

通過組合使用移動命令,可以摺疊指定的行。例如:使用zf70j命令,將摺疊游標之後的70行;使用5zF命令,將當前行及隨後4行摺疊起來;使用zf7G命令,將當前行至全文第7行摺疊起來。

我們也可以使用以下命令,摺疊括號(比如()、[]、{}、><等)包圍的區域:

zfa(

Vim並不會自動記憶手工摺疊。但你可以使用以下命令,來儲存當前的摺疊狀態:

:mkview

在下次開啟文件時,使用以下命令,來載入記憶的摺疊資訊:

:loadview

可以使用以下命令,檢視關於手工摺疊的幫助資訊:

:help fold-manual

Indent Fold

使用以下命令,啟用縮排摺疊。所有文字將按照(選項shiftwidth 定義的)縮排層次自動摺疊。

:set foldmethod=indent

使用zm命令,可以手動摺疊縮排;而利用zr命令,則可以開啟摺疊的縮排。

使用以下命令,將可以根據指定的級別摺疊縮排:

:set foldlevel=1

可以使用以下命令,檢視關於縮排摺疊的幫助資訊:

:help fold-indent

Syntax Fold

使用以下命令,啟用語法摺疊。所有文字將按照語法結構自動摺疊。

:set foldmethod=syntax

可以使用以下命令,檢視關於語法摺疊的幫助資訊:

:help fold-syntax

Marker Fold

使用以下命令,啟用標記摺疊。所有文字將按照特定標記(預設為{{{和}}})自動摺疊。

:set foldmethod=marker

我們可以利用標記摺疊,在文字中同時體現結構和內容,並且能夠快速跳轉到檔案的不同部分。

可以使用以下命令,檢視關於標記摺疊的幫助資訊:

:help fold-marker

摺疊選項

使用:set foldcolumn=W命令(W是一個0-12的整數),將在螢幕左側顯示一個摺疊標識列,分別用“-”和“+”而表示開啟和關閉的摺疊。

使用以下命令,可以檢視關於摺疊的幫助資訊:

:help folding
命令 意義
zc 關閉當前開啟的摺疊
zo 開啟當前的摺疊
zm 關閉所有摺疊
zM 關閉所有摺疊及其巢狀的摺疊
zr 開啟所有摺疊
zR 開啟所有摺疊及其巢狀的摺疊
zd 刪除當前摺疊
zE 刪除所有摺疊
zj 移動至下一個摺疊
zk 移動至上一個摺疊
zn 禁用摺疊
zN 啟用摺疊