You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
938 B
36 lines
938 B
4 years ago
|
" Copyright (c) 2019 Liu-Cheng Xu
|
||
|
" MIT License
|
||
|
" vim: ts=2 sw=2 sts=2 et
|
||
|
|
||
|
" Treat the number of heading whitespaces as indent level
|
||
|
function! s:HeadingWhitespaces(line) abort
|
||
|
return strlen(matchstr(a:line,'\v^\s+'))
|
||
|
endfunction
|
||
|
|
||
|
function! vista#fold#Expr() abort
|
||
|
if getline(v:lnum) =~# '^$'
|
||
|
return 0
|
||
|
endif
|
||
|
|
||
|
let cur_indent = s:HeadingWhitespaces(getline(v:lnum))
|
||
|
let next_indent = s:HeadingWhitespaces(getline(v:lnum+1))
|
||
|
|
||
|
if cur_indent < next_indent
|
||
|
return '>'.next_indent
|
||
|
else
|
||
|
return cur_indent
|
||
|
endif
|
||
|
endfunction
|
||
|
|
||
|
function! vista#fold#Text() abort
|
||
|
let line = getline(v:foldstart)
|
||
|
|
||
|
" Foldtext ignores tabstop and shows tabs as one space,
|
||
|
" so convert tabs to 'tabstop' spaces, then text lines up.
|
||
|
let spaces = repeat(' ', &tabstop)
|
||
|
let line = substitute(line, '\t', spaces, 'g')
|
||
|
let line = substitute(line, g:vista_fold_toggle_icons[0], g:vista_fold_toggle_icons[1], '')
|
||
|
|
||
|
return line
|
||
|
endfunction
|