vim/ftplugin/lisp/lispfolding.vim @ af9026179cd3
A bunch of vim crap
author |
Steve Losh <steve@stevelosh.com> |
date |
Fri, 25 Mar 2016 21:41:27 +0000 |
parents |
1a3a3aa19a41 |
children |
b69dc77f379c |
if exists('loaded_lispfolding') || &cp
finish
endif
let loaded_lispfolding=1
" ---------------------------------------------------------------------------
" Automagic Lisp folding on defn's and defmacro's
"
function! GetLispFold()
let inline_fn_comment_re = '\v^ *;;( .*)?$'
if getline(v:lnum) =~ '^;;;; .*'
return "0"
elseif getline(v:lnum) =~ '^;;;.*'
return "1"
elseif getline(v:lnum) =~ inline_fn_comment_re
if getline(v:lnum + 1) =~ inline_fn_comment_re
return "2"
else
return "<2"
endif
elseif getline(v:lnum) =~ '^; .*'
return "0"
elseif getline(v:lnum) =~ '^(defun.*\s'
return ">1"
elseif getline(v:lnum) =~ '^(test.*\s'
return ">1"
elseif getline(v:lnum) =~ '^(defmacro.*\s'
return ">1"
elseif getline(v:lnum) =~ '^(defmethod.*\s'
return ">1"
elseif getline(v:lnum) =~ '^(defgeneric.*\s'
return ">1"
elseif getline(v:lnum) =~ '^(defparameter.*\s'
return ">1"
elseif getline(v:lnum) =~ '^(defconstant.*\s'
return ">1"
elseif getline(v:lnum) =~ '^(deftype.*\s'
return ">1"
elseif getline(v:lnum) =~ '^(defvar.*\s'
return ">1"
elseif getline(v:lnum) =~ '^(defclass.*\s'
return ">1"
elseif getline(v:lnum) =~ '^(defstruct.*\s'
return ">1"
elseif getline(v:lnum) =~ '^(define-.*\s'
return ">1"
elseif getline(v:lnum) =~ '^\s*$'
let my_lispnum = v:lnum
let my_lispmax = line("$")
while (1)
let my_lispnum = my_lispnum + 1
if my_lispnum > my_lispmax
return "<1"
endif
let my_lispdata = getline(my_lispnum)
" If we match an empty line, stop folding
if my_lispdata =~ '^$'
return "<1"
else
return "="
endif
endwhile
else
return "="
endif
endfunction
function! TurnOnLispFolding()
setlocal foldexpr=GetLispFold()
setlocal foldmethod=expr
endfunction