【发布时间】:2014-09-10 08:33:29
【问题描述】:
我想让foldexpr 像outshine.el 一样处理我的.emacs 文件。换句话说,我想得到这个例子中的折叠级别:
0
;;; 0
1
1
;;;; 1
2
2
;;;;; 2
3
;;;; 1
2
;;; 0
1
1
(类似 Advanced Folding _ Learn Vimscript the Hard Way 的符号。)
总之,我认为foldexpr 将不得不检查当前行和以前的行。
如果当前行至少有 3 个;,则折叠级别将减少 3 个。否则,如果上一行至少有 3,则当前的折叠级别将少 2,否则折叠级别应等于上一行。
这就是我试图用
达到的效果function ELispLevel()
let n = len(matchstr(getline(v:lnum), '^;\+'))
let m = len(matchstr(getline(v:lnum-1), '^;\+'))
if n >= 2
return ">" . n-3
else
if m >= 2
return ">" . m-2
else
return "="
endif
endfunction
(大部分代码归功于Vim Markdown Folding? - Stack Overflow 对降价折叠的讨论,尤其是 Omar Antolín-Camarena 的评论。)
我猜这不起作用。我的一些不那么琐碎的修改包括n-3 和m-2,所以也许我只是搞砸了那里的语法。但我担心我的错误可能在任何地方,希望有人能找到它。
我也有以下尝试为我的init.el 文件激活它,
aug filetype_lisp
au!
" au FileType lisp setl fdm=marker fmr=;;;,;;+
au FileType lisp setlocal foldmethod=expr foldexpr=ELispLevel()
aug END
(顺便说一句,我从中学到的第三个链接是vim - Explaining foldexpr syntax - Stack Overflow)
【问题讨论】:
标签: vim