mirror of
				https://github.com/vim/vim.git
				synced 2025-11-03 09:44:48 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			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
 |