From 5bc380150aee647d26a5a538ed855e9e82dcc7f7 Mon Sep 17 00:00:00 2001 From: Adam Stankiewicz Date: Thu, 12 Sep 2013 17:32:53 +0200 Subject: Add erlang support --- indent/erlang.vim | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 indent/erlang.vim (limited to 'indent/erlang.vim') 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 +" 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(':p:h') . '/erlang_indent.erl' +if filewritable(expand(':p:h')) == 2 + let s:in_fifo = expand(':p:h') . '/vimerl_in_fifo.' . getpid() + let s:out_fifo = expand(':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 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 -- cgit v1.2.3