折叠细节
回顾上次
- 上次咱们讲的是折叠
折叠有很多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 - 蓝桥云课)