乐趣区

关于vim:oeasy教您玩转vim-70-折叠细节

折叠细节

回顾上次

  • 上次咱们讲的是折叠
  • 折叠有很多 options

    • foldlevel – 显示折叠档次
    • foldcolumn – 折叠树宽度
    • foldmethod – 折叠形式

      • manual – 手动
      • indent – 缩进
  • 折叠的定义

    • zf2j

      • 以后行和上面两行建设折叠
    • zfa{

      • 用大括号 (蕴含) 建设折叠
    • zfi{

      • 用大括号 (不蕴含) 建设折叠
  • 折叠的删除

    • zd
  • 折叠的关上和敞开

    • zo open
    • zc 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是折叠
    • rreduce
    • 让折叠档次 fold level1
    • zR 所有的折叠都关上
  • zm

    • z是折叠
    • mmore
    • 让折叠档次 fold level1
    • zM 所有的折叠都敞开
  • zozc 区别

    • zozc仅对以后行起作用
    • zrzm对所有文字起作用
  • 如果我想对于某些 {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 就是折叠的档次

语法缩进

  • 这个比较复杂
  • 要设置具体的缩进规定的语法文件
  • 然而一旦设置好了之后
  • 就一劳永逸了
  • 个别罕用的语言都有现成的 syntax.vim
  • 然而咱们也能够本人尝试

设置语法折叠

  • :syn sync fromstart
  • :set foldmethod=syntax
  • :syn region myFold start="{" end="}" transparent fold
  • 因为这个类有两层大括号
  • 所以被分成了两级折叠

  • foldnestmax 能够管制最大层数

标记折叠

  • 这个设置形式间接在源文件外面用正文的形式做标记
  • 有点是特地明确
  • 毛病是不易批改
  • 而且在源文件外面放那么多不相干的内容
  • 增大存储、传输、了解的压力

diff 折叠

  • 次要作用是找到两个文件中不同的局部
  • 雷同的局部就给他折叠了
  • 这个也是 vimdiff 次要的 foldmethod

  • 这么多到底用哪个?

    • indent!就很好
    • 很多语言缩进就是档次
    • 缩进就代表逻辑

总结

  • 折叠形式很多

    • 咱们个别就用默认的就行
    • indent 也很好用
    • 前提是缩进语法严格到位
  • 关上敞开

    • zczo 是关上敞开以后行
    • zmzr 能够扭转 foldlevel
  • 配合 {range}

    • :{range}foldopen! 能够在范畴内关上行
    • :{range}foldclose! 能够在范畴内敞开行
  • 然而这个折叠
  • 一敞开 vim 就没了
  • 这个折叠状态能够保留住么?🤔
  • 下次再说!

[Github 地址] (https://github.com/overmind19…)
[Gitee 地址] (overmind1980/oeasyvim)
[蓝桥实验楼 邀请码 FJWYIMGB] (oeasy 教您零根底玩转编辑神器 Vim_Linux – 蓝桥云课)

退出移动版