Improve custom vim fold expression

This commit is contained in:
Kenneth Benzie 2016-09-08 22:57:01 +01:00
parent e5b886be58
commit 641d3a514a

View File

@ -1,47 +1,32 @@
" Mapping for Vim help of the word under cursor. " Mapping for Vim help of the word under cursor.
nnoremap K :help <C-r><C-w><CR> nnoremap K :help <C-r><C-w><CR>
" Set custom fold expression
setlocal foldmethod=expr setlocal foldmethod=expr
setlocal foldexpr=GetVimFold(v:lnum) setlocal foldexpr=VimFold(v:lnum)
" Regex for vim script blocks & markers {{{ " Custom fold expresson folds control flow keywords and fold markers
let s:vim_funciton_start = '^\s*fun\(c\(tion\)\=\)\=!\=\s\+.*#\=\w*(.*).*$' function! VimFold(lnum)
let s:vim_function_end = '^\s*endfun\(c\(tion\)\=\)\=\s*$'
let s:vim_if_start = '^\s*if\s*.*$'
let s:vim_if_end = '\s*en\(dif\)\=\s*$'
let s:vim_while_start = '^\s*wh\(ile)\=\s*.*$'
let s:vim_while_end = '\s*endw\(hile\)\=\s*$'
let s:vim_for_start = '^\s*for\s*.*$'
let s:vim_for_end = '\s*endfo\(r\)\=\s*$'
let s:vim_try_start = '^\s*try\s*.*$'
let s:vim_try_end = '\s*endt\(ry\)\=\s*$'
let s:vim_augroup_start = '^\s*aug\(roup\)\=\s*.*\(END\)\@<!$'
let s:vim_augroup_end = '^\s*aug\(roup\)\=\s*END\s*$'
let s:vim_marker_start = '\s*".*{{{\s*$'
let s:vim_marker_end = '\s*".*}}}\s*$'
" }}}
function! GetVimFold(lnum)
let l:line = getline(a:lnum) let l:line = getline(a:lnum)
if l:line =~ s:vim_function_end || l:line =~ s:vim_if_end || if l:line =~ '^\s*fun\(c\(tion\)\=\)\=!\=\s\+.*#\=\w*(.*).*$'
\ l:line =~ s:vim_while_end || l:line =~ s:vim_for_end || \ || l:line =~ '^\s*if\s*.*$'
\ l:line =~ s:vim_try_end || l:line =~ s:vim_augroup_end || \ || l:line =~ '^\s*el\(se\)\=\s*.*$'
\ l:line =~ s:vim_marker_end \ || l:line =~ '^\s*elseif\=\s*.*$'
return "s1" \ || l:line =~ '^\s*wh\(ile\)\=\s*.*$'
endif \ || l:line =~ '^\s*for\s*.*$'
\ || l:line =~ '^\s*try\s*$'
if l:line =~ s:vim_funciton_start || l:line =~ s:vim_if_start || \ || l:line =~ '^\s*cat\(ch\)\=\s*.*$'
\ l:line =~ s:vim_while_start || l:line =~ s:vim_for_start || \ || l:line =~ '^\s*fina\(lly\)\=\s*$'
\ l:line =~ s:vim_try_start || l:line =~ s:vim_augroup_start || \ || l:line =~ '\s*".*{{{\s*$'
\ l:line =~ s:vim_marker_start return '>'.string((indent(a:lnum) / &shiftwidth) + 1)
return 'a1' elseif l:line =~ '^\s*endfun\(c\(tion\)\=\)\=\s*$'
\ || l:line =~ '^\s*en\(dif\)\=\s*$'
\ || l:line =~ '^\s*endw\(hile\)\=\s*$'
\ || l:line =~ '^\s*endfor\=\s*$'
\ || l:line =~ '^\s*endt\(ry\)\=\s*$'
\ || l:line =~ '\s*".*}}}\s*$'
return '<'.string((indent(a:lnum) / &shiftwidth) + 1)
endif endif
return '=' return '='