1" Vim filetype plugin file (GUI menu and folding) 2" Language: Debian control files 3" Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org> 4" Former Maintainer: Pierre Habouzit <madcoder@debian.org> 5" Last Change: 2008-03-08 6" URL: http://hg.debian.org/hg/pkg-vim/vim/raw-file/tip/runtime/ftplugin/debcontrol.vim 7 8" Do these settings once per buffer 9if exists("b:did_ftplugin") 10 finish 11endif 12let b:did_ftplugin=1 13 14" {{{1 Local settings (do on every load) 15if exists("g:debcontrol_fold_enable") 16 setlocal foldmethod=expr 17 setlocal foldexpr=DebControlFold(v:lnum) 18 setlocal foldtext=DebControlFoldText() 19endif 20setlocal textwidth=0 21 22" Clean unloading 23let b:undo_ftplugin = "setlocal tw< foldmethod< foldexpr< foldtext<" 24 25" }}}1 26 27" {{{1 folding 28 29function! s:getField(f, lnum) 30 let line = getline(a:lnum) 31 let fwdsteps = 0 32 while line !~ '^'.a:f.':' 33 let fwdsteps += 1 34 let line = getline(a:lnum + fwdsteps) 35 if line == '' 36 return 'unknown' 37 endif 38 endwhile 39 return substitute(line, '^'.a:f.': *', '', '') 40endfunction 41 42function! DebControlFoldText() 43 if v:folddashes == '-' " debcontrol entry fold 44 let type = substitute(getline(v:foldstart), ':.*', '', '') 45 if type == 'Source' 46 let ftext = substitute(foldtext(), ' *Source: *', ' ', '') 47 return ftext . ' -- ' . s:getField('Maintainer', v:foldstart) . ' ' 48 endif 49 let arch = s:getField('Architecture', v:foldstart) 50 let ftext = substitute(foldtext(), ' *Package: *', ' [' . arch . '] ', '') 51 return ftext . ': ' . s:getField('Description', v:foldstart) . ' ' 52 endif 53 return foldtext() 54endfunction 55 56function! DebControlFold(l) 57 58 " This is for not merging blank lines around folds to them 59 if getline(a:l) =~ '^Source:' 60 return '>1' 61 endif 62 63 if getline(a:l) =~ '^Package:' 64 return '>1' 65 endif 66 67 return '=' 68endfunction 69 70" }}}1 71