折叠细节
回顾上次
- 上次咱们讲的是折叠
-
折叠有很多 options
foldlevel
– 显示折叠档次foldcolumn
– 折叠树宽度-
foldmethod
– 折叠形式manual
– 手动indent
– 缩进
-
折叠的定义
-
zf2j
- 以后行和上面两行建设折叠
-
zfa{
- 用大括号 (蕴含) 建设折叠
-
zfi{
- 用大括号 (不蕴含) 建设折叠
-
-
折叠的删除
zd
-
折叠的关上和敞开
zo
openzc
close:set foldlevel=1
设置折叠档次
-
这个缩进折叠能够对于程序文件应用么?🤔
- 入手试试!
关上oeasy.java
- 设置和查看属性
-
折叠的 options
-
foldmethod
设置为- indent – 缩进
-
foldcolumn
折叠树设置为- 4 列
:set foldcolumn=4
-
foldlevel
折叠档次- 设置为 0 折叠整个 class
- 设置为 1 折叠各个函数
- 设置为 2 全副关上
- 默认设置为 99 全副关上
: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
区别zo
、zc
仅对以后行起作用zr
、zm
对所有文字起作用
- 如果我想对于某些
{range}
起作用,能够么?
foldopen、foldclose 命令
- 加上!的目标是彻底递归地折叠所有,能折到哪里折到哪里
-
:.foldopen
- 以后行关上折叠
zo
- 以后行关上折叠
-
:%foldclose
- 所有都敞开折叠
zc
- 所有都敞开折叠
-
:1,15foldopen
- 1,15 行都折叠
zc
- 1,15 行都折叠
-
:33,Gfoldclose!
- 33 到最初一行彻底折叠
zC
- 33 到最初一行彻底折叠
更多折叠办法
- 咱们能够
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 键
- 那么这行就进入折叠范畴
- 只有这一行的第 0 个元素是
空行作为表达式
-
上面这两条差不多
: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 就是折叠的档次
语法缩进
- 这个比较复杂
- 要设置具体的缩进规定的语法文件
- 然而一旦设置好了之后
- 就一劳永逸了
- 个别罕用的语言都有现成的 syntax.vim
- 然而咱们也能够本人尝试
设置语法折叠
:syn sync fromstart
:set foldmethod=syntax
:syn region myFold start="{" end="}" transparent fold
- 因为这个类有两层大括号
- 所以被分成了两级折叠
- foldnestmax 能够管制最大层数
标记折叠
- 这个设置形式间接在源文件外面用正文的形式做标记
- 有点是特地明确
- 毛病是不易批改
- 而且在源文件外面放那么多不相干的内容
- 增大存储、传输、了解的压力
diff 折叠
- 次要作用是找到两个文件中不同的局部
- 雷同的局部就给他折叠了
- 这个也是 vimdiff 次要的 foldmethod
-
这么多到底用哪个?
- indent!就很好
- 很多语言缩进就是档次
- 缩进就代表逻辑
总结
-
折叠形式很多
- 咱们个别就用默认的就行
- indent 也很好用
- 前提是缩进语法严格到位
-
关上敞开
zc
、zo
是关上敞开以后行zm
、zr
能够扭转 foldlevel
-
配合
{range}
:{range}foldopen!
能够在范畴内关上行:{range}foldclose!
能够在范畴内敞开行
- 然而这个折叠
- 一敞开 vim 就没了
- 这个折叠状态能够保留住么?🤔
- 下次再说!
[Github 地址] (https://github.com/overmind19…)
[Gitee 地址] (overmind1980/oeasyvim)
[蓝桥实验楼 邀请码 FJWYIMGB] (oeasy 教您零根底玩转编辑神器 Vim_Linux – 蓝桥云课)