16be7f873SBram Moolenaar" Vim ftplugin file 2*82be4849SBram Moolenaar" Language: Erlang (http://www.erlang.org) 3*82be4849SBram Moolenaar" Maintainer: Csaba Hoch <[email protected]> 4cb80aa2dSBram Moolenaar" Author: Oscar Hellström <[email protected]> 5cb80aa2dSBram Moolenaar" Contributors: Ricardo Catalinas Jiménez <[email protected]> 66be7f873SBram Moolenaar" Eduardo Lopez (http://github.com/tapichu) 7*82be4849SBram Moolenaar" Arvid Bjurklint (http://github.com/slarwise) 8*82be4849SBram Moolenaar" Last Update: 2021-Jan-08 96be7f873SBram Moolenaar" License: Vim license 10*82be4849SBram Moolenaar" URL: https://github.com/vim-erlang/vim-erlang-runtime 116be7f873SBram Moolenaar 126be7f873SBram Moolenaarif exists('b:did_ftplugin') 136be7f873SBram Moolenaar finish 14*82be4849SBram Moolenaarendif 156be7f873SBram Moolenaarlet b:did_ftplugin = 1 166be7f873SBram Moolenaar 1784f7235bSBram Moolenaarlet s:cpo_save = &cpo 1884f7235bSBram Moolenaarset cpo&vim 1984f7235bSBram Moolenaar 20*82be4849SBram Moolenaarlet &l:keywordprg = get(g:, 'erlang_keywordprg', 'erl -man') 216be7f873SBram Moolenaar 22*82be4849SBram Moolenaarif get(g:, 'erlang_folding', 0) 236be7f873SBram Moolenaar setlocal foldmethod=expr 246be7f873SBram Moolenaar setlocal foldexpr=GetErlangFold(v:lnum) 256be7f873SBram Moolenaar setlocal foldtext=ErlangFoldText() 266be7f873SBram Moolenaarendif 276be7f873SBram Moolenaar 286be7f873SBram Moolenaarsetlocal comments=:%%%,:%%,:% 296be7f873SBram Moolenaarsetlocal commentstring=%%s 306be7f873SBram Moolenaar 316be7f873SBram Moolenaarsetlocal formatoptions+=ro 326be7f873SBram Moolenaar 33*82be4849SBram Moolenaarsetlocal suffixesadd=.erl,.hrl 34*82be4849SBram Moolenaar 35*82be4849SBram Moolenaarlet &l:include = '^\s*-\%(include\|include_lib\)\s*("\zs\f*\ze")' 36*82be4849SBram Moolenaarlet &l:define = '^\s*-\%(define\|record\|type\|opaque\)' 37*82be4849SBram Moolenaar 38*82be4849SBram Moolenaarlet s:erlang_fun_begin = '^\a\w*(.*$' 39*82be4849SBram Moolenaarlet s:erlang_fun_end = '^[^%]*\.\s*\(%.*\)\?$' 40*82be4849SBram Moolenaar 41*82be4849SBram Moolenaarif !exists('*GetErlangFold') 426be7f873SBram Moolenaar function GetErlangFold(lnum) 436be7f873SBram Moolenaar let lnum = a:lnum 446be7f873SBram Moolenaar let line = getline(lnum) 456be7f873SBram Moolenaar 466be7f873SBram Moolenaar if line =~ s:erlang_fun_end 476be7f873SBram Moolenaar return '<1' 486be7f873SBram Moolenaar endif 496be7f873SBram Moolenaar 506be7f873SBram Moolenaar if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1 516be7f873SBram Moolenaar return '1' 526be7f873SBram Moolenaar endif 536be7f873SBram Moolenaar 546be7f873SBram Moolenaar if line =~ s:erlang_fun_begin 556be7f873SBram Moolenaar return '>1' 566be7f873SBram Moolenaar endif 576be7f873SBram Moolenaar 586be7f873SBram Moolenaar return '=' 596be7f873SBram Moolenaar endfunction 60*82be4849SBram Moolenaarendif 616be7f873SBram Moolenaar 62*82be4849SBram Moolenaarif !exists('*ErlangFoldText') 636be7f873SBram Moolenaar function ErlangFoldText() 646be7f873SBram Moolenaar let line = getline(v:foldstart) 655dc6252dSBram Moolenaar let foldlen = v:foldend - v:foldstart + 1 665dc6252dSBram Moolenaar let lines = ' ' . foldlen . ' lines: ' . substitute(line, "[\ \t]*", '', '') 675dc6252dSBram Moolenaar if foldlen < 10 685dc6252dSBram Moolenaar let lines = ' ' . lines 695dc6252dSBram Moolenaar endif 705dc6252dSBram Moolenaar let retval = '+' . v:folddashes . lines 715dc6252dSBram Moolenaar 726be7f873SBram Moolenaar return retval 736be7f873SBram Moolenaar endfunction 74*82be4849SBram Moolenaarendif 756be7f873SBram Moolenaar 76*82be4849SBram Moolenaarlet b:undo_ftplugin = "setlocal keywordprg< foldmethod< foldexpr< foldtext<" 77*82be4849SBram Moolenaar \ . " comments< commentstring< formatoptions< suffixesadd< include<" 78*82be4849SBram Moolenaar \ . " define<" 7984f7235bSBram Moolenaar 8084f7235bSBram Moolenaarlet &cpo = s:cpo_save 8184f7235bSBram Moolenaarunlet s:cpo_save 82*82be4849SBram Moolenaar 83*82be4849SBram Moolenaar" vim: sw=2 et 84