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 啟用折疊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM