vim 书写自己的折叠表达式

vim 书写自己的折叠表达式
学习总是充满了各种各样的坑, 纵然是小坑,也能使不留意的人摔个跟头.
书写了一个vim 折叠代码, 实现遇见'{'开始折叠,遇到'}' 折叠结束.
非常简单的代码,只需要写一个折叠计算函数, 灵foldexpr 调用该函数即可. 即set foldexpr=你的函数.
代码不过区区几行,但一些概念很关键! 这里把一些关键点及结果写下来, 希望你有所启发.

1. vim 函数的第一个字母不能是小写,必须是大写字母,以区别于系统函数
2. vim 函数的引入方式或加载方式,
    不能用 '<,'>source 的命令来执行, 也不能用:source " 来执行,错误提示是source 不支持范围
    source 命令的参数是文件名,是用来加载文件的.
3. 可以用function 命令来查看加载的函数列表.
4. function 的参数必须要加a: 来引用.

5. 语句不能像类c语言等加分号结尾, 那样会出错.

6. 声明变量最好加限定符号,例如l:, g:, b:,s:等.

所以正确的方式是: 写一个函数,保存为文件,例如1.vim, 然后用source 1.vim 来加载你写的函数,用function 可查看函数的存在.

举例:

"fold-expr 表达式
function! Myexpr(thisline)
   let    l:p1=match(a:thisline,'{')
   let    l:p2=match(a:thisline,'}')

  if l:p1>=0 && l:p2>=0
      return '='
  elseif l:p1>=0
    return 'a1'
  elseif l:p2>=0
    return 's1'
  else
    return '='
  endif
endfunction

举这个例子是你可以用它来写folder 折叠的级别, a1,s1都有特殊的含义, 参考h fold-expr

测试:
echo Myexpr("test")

使用:
在.vimrc 添加如下代码

"fold-expr 表达式
function! Myexpr(thisline)
   let    l:p1=match(a:thisline,'{')
   let    l:p2=match(a:thisline,'}')

  if l:p1>=0 && l:p2>=0
      return '='
  elseif l:p1>=0
    return 'a1'
  elseif l:p2>=0
    return 's1'
  else
    return '='
  endif
endfunction


set foldexpr=Myexpr(getline(v:lnum))

当打开一个文件时, 为了折叠,可以输入如下命令: set fdm=expr

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值