From 220f54eba6108ff32c5be06894a3f4da27727a08 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Thu, 17 Dec 2009 02:54:38 +0100 Subject: Add haskell indentation to vim. --- .vim/indent/haskell.vim | 85 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 .vim/indent/haskell.vim (limited to '.vim/indent') diff --git a/.vim/indent/haskell.vim b/.vim/indent/haskell.vim new file mode 100644 index 0000000..dc7c649 --- /dev/null +++ b/.vim/indent/haskell.vim @@ -0,0 +1,85 @@ +" Vim indent file +" Language: Haskell +" Author: motemen +" Version: 0.1 +" Last Change: 2007-07-25 +" +" Modify g:haskell_indent_if and g:haskell_indent_case to +" change indentation for `if'(default 3) and `case'(default 5). +" Example (in .vimrc): +" > let g:haskell_indent_if = 2 + +if exists('b:did_indent') + finish +endif + +let b:did_indent = 1 + +if !exists('g:haskell_indent_if') + " if bool + " >>>then ... + " >>>else ... + let g:haskell_indent_if = 3 +endif + +if !exists('g:haskell_indent_case') + " case xs of + " >>>>>[] -> ... + " >>>>>(y:ys) -> ... + let g:haskell_indent_case = 5 +endif + +setlocal indentexpr=GetHaskellIndent() +setlocal indentkeys=!^F,o,O + +function! GetHaskellIndent() + let line = substitute(getline(getpos('.')[1] - 1), '\t', repeat(' ', &tabstop), 'g') + + if line =~ '[!#$%&*+./<=>?@\\^|~-]$\|\' + let s = match(line, '\.*\&.*\zs\') + if s > 0 + return s + endif + + let s = match(line, '\') + if s > 0 + return s + g:haskell_indent_if + endif + endif + + let s = match(line, '\ 0 + return s + endif + + let s = match(line, '\') + if s > 0 + return s + g:haskell_indent_case + endif + + return match(line, '\S') +endfunction -- cgit v1.2.3-54-g00ecf