oeasy教您玩轉vim - 70 - # 折疊細節(jié)
折疊細節(jié)
回憶上次
上次我們講的是折疊
折疊有很多options
manual
- 手動indent
- 縮進foldlevel
- 顯示折疊層次foldcolumn
- 折疊樹寬度foldmethod
- 折疊方式折疊的定義
用大括號(不包含)建立折疊
用大括號(包含)建立折疊
當前行和下面兩行建立折疊
zf2j
zfa{
zfi{
折疊的刪除
zd
折疊的打開和關閉
zo
openzc
close:set foldlevel=1
設置折疊層次這個縮進折疊可以對于程序文件使用么???
動手試試!
打開oeasy.java
設置和查看屬性
折疊的options
設置為0 折疊整個class
設置為1 折疊各個函數(shù)
設置為2 全部打開
默認設置為99 全部打開
4列
:set foldcolumn=4
indent - 縮進
foldmethod
設置為foldcolumn
折疊樹設置為foldlevel
折疊層次:set foldopen=all
也可以直接打開所有折疊:set foldclose=all
可以直接關閉所有折疊但是這個東西有快捷鍵么?
zr和zm

zr
z
是折疊r
是reduce
讓折疊層次
fold level
減1
zR
所有的折疊都打開zm
z
是折疊m
是more
讓折疊層次
fold level
加1
zM
所有的折疊都關閉和
zo
、zc
區(qū)別zo
、zc
僅對當前行起作用zr
、zm
對所有文字起作用如果我想對于某些
{range}
起作用,可以么?
foldopen、foldclose命令

加上!的目的是徹底遞歸地折疊所有,能折到哪里折到哪里
:.foldopen
當前行打開折疊
zo
:%foldclose
所有都關閉折疊
zc
:1,15foldopen
1,15行都折疊
zc
:33,Gfoldclose!
33到最后一行徹底折疊 ? ?
zC
更多折疊方法
我們可以
h foldmethod
來觀察一下

折疊的模式總共有6種
手動 - ?
manual
縮進 - ?
indent
表達式 -
expr
標記 -
marker
語法 -
syntax
差異 -
diff
這里面就是
indent
最好用幫助手冊中的超鏈接
用ctrl+]跳入
用ctrl+o跳入
表達式折疊
首先設置折疊方法為表達式
:set foldmethod=expr
顯示出空出來的縮進究竟是tab還是空格
:set listchars=eol:$,tab:>-,space:_
然后設置各種表達式

設置
:set foldexpr=getline(v:lnum)[0]== \"\\t\"
只要這一行的第0個元素是
"\t"
但注意雙引號和反斜杠都需要轉義
也就是tab鍵
那么這行就進入折疊范圍


空行作為表達式


下面這兩條差不多
:set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1
:set foldexpr=getline(v:lnum-1)=~'^\\s*$'&&getline(v:lnum)=~'\\S'?'>1':1
都可以把把空行分割開的段落都折疊起來
后面的是一個表達式
上一行不是空行并且上一行有非空字符那表達式就是1
關于表達式的計算

:set foldexpr=getline(v:lnum-1)=~'^\\s*$'&&getline(v:lnum)=~'\\S'?'>1':1
:set foldexpr=
后面的是一個表達式上一行不是空行并且上一行有非空字符那表達式就是1
這個1就是折疊的層次
語法縮進
這個比較復雜
要設置具體的縮進規(guī)則的語法文件
但是一旦設置好了之后
就一勞永逸了
一般常用的語言都有現(xiàn)成的syntax.vim
但是我們也可以自己嘗試

設置語法折疊
:syn sync fromstart
:set foldmethod=syntax
:syn region myFold start="{" end="}" transparent fold
由于這個類有兩層大括號
所以被分成了兩級折疊

foldnestmax可以控制最大層數(shù)
標記折疊

這個設置方式直接在源文件里面用注釋的方式做標記
有點是特別明確
缺點是不易修改
而且在源文件里面放那么多不相關的內容
增大存儲、傳輸、理解的壓力
diff折疊
主要作用是找到兩個文件中不同的部分
相同的部分就給他折疊了
這個也是vimdiff主要的foldmethod

這么多到底用哪個?
indent!就很好
很多語言縮進就是層次
縮進就代表邏輯
總結
折疊方式很多
我們一般就用默認的就行
indent也很好用
前提是縮進語法嚴格到位
打開關閉
zc
、zo
是打開關閉當前行zm
、zr
可以改變foldlevel配合
{range}
:{range}foldopen!
可以在范圍內打開行:{range}foldclose!
可以在范圍內關閉行但是這個折疊
一關閉vim就沒了
這個折疊狀態(tài)可以保存住么???
下次再說!
[Github地址] (https://github.com/overmind1980/oeasyvim)
[Gitee地址] (overmind1980/oeasyvim)
[藍橋實驗樓 邀請碼FJWYIMGB] (oeasy 教您零基礎玩轉編輯神器 Vim_Linux - 藍橋云課)