forked from aniani/vim
		
	
		
			
				
	
	
		
			88 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
| " Vim ftplugin file
 | |
| " Language:     Erlang
 | |
| " Author:       Oscar Hellström <oscar@oscarh.net>
 | |
| " Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
 | |
| "               Eduardo Lopez (http://github.com/tapichu)
 | |
| " License:      Vim license
 | |
| " Version:      2012/01/25
 | |
| 
 | |
| if exists('b:did_ftplugin')
 | |
| 	finish
 | |
| else
 | |
| 	let b:did_ftplugin = 1
 | |
| endif
 | |
| 
 | |
| if exists('s:did_function_definitions')
 | |
| 	call s:SetErlangOptions()
 | |
| 	finish
 | |
| else
 | |
| 	let s:did_function_definitions = 1
 | |
| endif
 | |
| 
 | |
| let s:cpo_save = &cpo
 | |
| set cpo&vim
 | |
| 
 | |
| if !exists('g:erlang_keywordprg')
 | |
| 	let g:erlang_keywordprg = 'erl -man'
 | |
| endif
 | |
| 
 | |
| if !exists('g:erlang_folding')
 | |
| 	let g:erlang_folding = 0
 | |
| endif
 | |
| 
 | |
| let s:erlang_fun_begin = '^\a\w*(.*$'
 | |
| let s:erlang_fun_end   = '^[^%]*\.\s*\(%.*\)\?$'
 | |
| 
 | |
| function s:SetErlangOptions()
 | |
| 	if g:erlang_folding
 | |
| 		setlocal foldmethod=expr
 | |
| 		setlocal foldexpr=GetErlangFold(v:lnum)
 | |
| 		setlocal foldtext=ErlangFoldText()
 | |
| 	endif
 | |
| 
 | |
| 	setlocal comments=:%%%,:%%,:%
 | |
| 	setlocal commentstring=%%s
 | |
| 
 | |
| 	setlocal formatoptions+=ro
 | |
| 	let &l:keywordprg = g:erlang_keywordprg
 | |
| endfunction
 | |
| 
 | |
| function GetErlangFold(lnum)
 | |
| 	let lnum = a:lnum
 | |
| 	let line = getline(lnum)
 | |
| 
 | |
| 	if line =~ s:erlang_fun_end
 | |
| 		return '<1'
 | |
| 	endif
 | |
| 
 | |
| 	if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1
 | |
| 		return '1'
 | |
| 	endif
 | |
| 
 | |
| 	if line =~ s:erlang_fun_begin
 | |
| 		return '>1'
 | |
| 	endif
 | |
| 
 | |
| 	return '='
 | |
| endfunction
 | |
| 
 | |
| function ErlangFoldText()
 | |
| 	let line    = getline(v:foldstart)
 | |
| 	let foldlen = v:foldend - v:foldstart + 1
 | |
| 	let lines   = ' ' . foldlen . ' lines: ' . substitute(line, "[\ \t]*", '', '')
 | |
| 	if foldlen < 10
 | |
| 		let lines = ' ' . lines
 | |
| 	endif
 | |
| 	let retval = '+' . v:folddashes . lines
 | |
| 
 | |
| 	return retval
 | |
| endfunction
 | |
| 
 | |
| call s:SetErlangOptions()
 | |
| 
 | |
| let b:undo_ftplugin = "setlocal foldmethod< foldexpr< foldtext<"
 | |
| 	\ . " comments< commentstring< formatoptions<"
 | |
| 
 | |
| let &cpo = s:cpo_save
 | |
| unlet s:cpo_save
 |