Improve vim script fold with custom foldexpr
This commit is contained in:
parent
61e47dac00
commit
8eb08c17a6
@ -1,3 +1,48 @@
|
||||
setlocal foldmethod=marker
|
||||
" Mapping for Vim help of the word under cursor.
|
||||
nnoremap K :help <C-r><C-w><CR>
|
||||
|
||||
setlocal foldmethod=expr
|
||||
setlocal foldexpr=GetVimFold(v:lnum)
|
||||
|
||||
" Regex for vim script blocks & markers {{{
|
||||
let s:vim_funciton_start = '^\s*fun\(c\(tion\)\=\)\=!\=\s\+.*#\=\w*(.*).*$'
|
||||
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)
|
||||
|
||||
if l:line =~ s:vim_function_end || l:line =~ s:vim_if_end ||
|
||||
\ l:line =~ s:vim_while_end || l:line =~ s:vim_for_end ||
|
||||
\ l:line =~ s:vim_try_end || l:line =~ s:vim_augroup_end ||
|
||||
\ l:line =~ s:vim_marker_end
|
||||
return "s1"
|
||||
endif
|
||||
|
||||
if l:line =~ s:vim_funciton_start || l:line =~ s:vim_if_start ||
|
||||
\ l:line =~ s:vim_while_start || l:line =~ s:vim_for_start ||
|
||||
\ l:line =~ s:vim_try_start || l:line =~ s:vim_augroup_start ||
|
||||
\ l:line =~ s:vim_marker_start
|
||||
return 'a1'
|
||||
endif
|
||||
|
||||
return '='
|
||||
endfunction
|
||||
|
Loading…
x
Reference in New Issue
Block a user