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