blob: 531ea7090ca1421f680679432c45743a9ab0479f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
map <buffer> <S-e> :w<CR>:!/usr/bin/env python % <CR>
map <buffer> gd /def <C-R><C-W><CR>
set foldmethod=expr
set foldexpr=PythonFoldExpr(v:lnum)
set foldtext=PythonFoldText()
map <buffer> f za
map <buffer> F :call ToggleFold()<CR>
let b:folded = 1
function! ToggleFold()
if( b:folded == 0 )
exec "normal! zM"
let b:folded = 1
else
exec "normal! zR"
let b:folded = 0
endif
endfunction
function! PythonFoldText()
let size = 1 + v:foldend - v:foldstart
if size < 10
let size = " " . size
endif
if size < 100
let size = " " . size
endif
if size < 1000
let size = " " . size
endif
if match(getline(v:foldstart), '"""') >= 0
let text = substitute(getline(v:foldstart), '"""', '', 'g' ) . ' '
elseif match(getline(v:foldstart), "'''") >= 0
let text = substitute(getline(v:foldstart), "'''", '', 'g' ) . ' '
else
let text = getline(v:foldstart)
endif
return size . ' lines:'. text . ' '
endfunction
function! PythonFoldExpr(lnum)
if indent( nextnonblank(a:lnum) ) == 0
return 0
endif
if getline(a:lnum-1) =~ '^\(class\|def\)\s'
return 1
endif
if getline(a:lnum) =~ '^\s*$'
return "="
endif
if indent(a:lnum) == 0
return 0
endif
return '='
endfunction
" In case folding breaks down
function! ReFold()
set foldmethod=expr
set foldexpr=0
set foldnestmax=1
set foldmethod=expr
set foldexpr=PythonFoldExpr(v:lnum)
set foldtext=PythonFoldText()
echo
endfunction
|