diff options
| author | Adam Stankiewicz <sheerun@sher.pl> | 2013-09-12 17:32:53 +0200 | 
|---|---|---|
| committer | Adam Stankiewicz <sheerun@sher.pl> | 2013-09-12 17:32:53 +0200 | 
| commit | 5bc380150aee647d26a5a538ed855e9e82dcc7f7 (patch) | |
| tree | ccefa37a6445e393eed12719509f830eae513e3a /indent | |
| parent | 6eb0c57e8070d641382c8844d35408a2f13cc751 (diff) | |
| download | vim-polyglot-5bc380150aee647d26a5a538ed855e9e82dcc7f7.tar.gz vim-polyglot-5bc380150aee647d26a5a538ed855e9e82dcc7f7.zip | |
Add erlang support
Diffstat (limited to 'indent')
| -rw-r--r-- | indent/erlang.vim | 58 | 
1 files changed, 58 insertions, 0 deletions
| diff --git a/indent/erlang.vim b/indent/erlang.vim new file mode 100644 index 00000000..370a8810 --- /dev/null +++ b/indent/erlang.vim @@ -0,0 +1,58 @@ +" Vim indent file +" Language: Erlang +" Author:   Ricardo Catalinas Jiménez <jimenezrick@gmail.com> +" License:  Vim license +" Version:  2013/09/11 + +if !exists('g:erlang_force_use_vimerl_indent') +	let g:erlang_force_use_vimerl_indent = 0 +endif + +if exists('b:did_indent') || (v:version >= 704 && !g:erlang_force_use_vimerl_indent) +	finish +else +	let b:did_indent = 1 +endif + +setlocal indentexpr=ErlangIndent() +setlocal indentkeys=!^F,o,O,=),=},=],=>>,=of,=catch,=after,=end + +if exists('*ErlangIndent') +	finish +endif + +let s:erlang_indent_file = expand('<sfile>:p:h') . '/erlang_indent.erl' +if filewritable(expand('<sfile>:p:h')) == 2 +	let s:in_fifo  = expand('<sfile>:p:h') . '/vimerl_in_fifo.' . getpid() +	let s:out_fifo = expand('<sfile>:p:h') . '/vimerl_out_fifo.' . getpid() +else +	let s:in_fifo  = '/tmp/vimerl_in_fifo.' . getpid() +	let s:out_fifo = '/tmp/vimerl_out_fifo.' . getpid() +endif + +execute 'silent !mkfifo' s:in_fifo +execute 'silent !mkfifo' s:out_fifo +execute 'silent !' . s:erlang_indent_file s:out_fifo s:in_fifo '&' + +autocmd VimLeave * call <SID>StopIndenter() + +function s:StopIndenter() +	call writefile([], s:out_fifo) +	call delete(s:in_fifo) +	call delete(s:out_fifo) +endfunction + +function ErlangIndent() +	if v:lnum == 1 +		return 0 +	else +		call writefile([v:lnum] + getline(1, v:lnum), s:out_fifo) +		let indent = split(readfile(s:in_fifo)[0]) + +		if len(indent) == 1 || !&expandtab +			return indent[0] * &shiftwidth +		else +			return indent[1] +		endif +	endif +endfunction | 
