mirror of
https://github.com/neovim/neovim.git
synced 2024-12-29 14:41:06 -07:00
2a173c0669
runtime(erlang): add support for matchit plugin (vim/vim#13713) This commit updates the Erlang runtime files to be in sync with the `vim-erlang-runtime` repository. In particular, it adds the following commit (with some cleanup and simplification afterwards):6ea8b85bc9
18ab6c3392
Co-authored-by: Csaba Hoch <csaba.hoch@gmail.com>
120 lines
3.2 KiB
VimL
120 lines
3.2 KiB
VimL
" Vim ftplugin file
|
|
" Language: Erlang (http://www.erlang.org)
|
|
" Maintainer: Csaba Hoch <csaba.hoch@gmail.com>
|
|
" Author: Oscar Hellström <oscar@oscarh.net>
|
|
" Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
|
|
" Eduardo Lopez (http://github.com/tapichu)
|
|
" Arvid Bjurklint (http://github.com/slarwise)
|
|
" Paweł Zacharek (http://github.com/subc2)
|
|
" Last Update: 2023-Dec-20
|
|
" License: Vim license
|
|
" URL: https://github.com/vim-erlang/vim-erlang-runtime
|
|
|
|
if exists('b:did_ftplugin')
|
|
finish
|
|
endif
|
|
let b:did_ftplugin = 1
|
|
|
|
let s:cpo_save = &cpo
|
|
set cpo&vim
|
|
|
|
let &l:keywordprg = get(g:, 'erlang_keywordprg', 'erl -man')
|
|
|
|
if get(g:, 'erlang_folding', 0)
|
|
setlocal foldmethod=expr
|
|
setlocal foldexpr=GetErlangFold(v:lnum)
|
|
setlocal foldtext=ErlangFoldText()
|
|
endif
|
|
|
|
setlocal comments=:%%%,:%%,:%
|
|
setlocal commentstring=%%s
|
|
|
|
setlocal formatoptions+=ro
|
|
|
|
if get(g:, 'erlang_extend_path', 1)
|
|
" typical erlang.mk paths
|
|
let &l:path = join([
|
|
\ 'deps/*/include',
|
|
\ 'deps/*/src',
|
|
\ 'deps/*/test',
|
|
\ 'deps/*/apps/*/include',
|
|
\ 'deps/*/apps/*/src',
|
|
\ &g:path], ',')
|
|
" typical rebar3 paths
|
|
let &l:path = join([
|
|
\ 'apps/*/include',
|
|
\ 'apps/*/src',
|
|
\ '_build/default/lib/*/src',
|
|
\ '_build/default/*/include',
|
|
\ &l:path], ',')
|
|
" typical erlang paths
|
|
let &l:path = join(['include', 'src', 'test', &l:path], ',')
|
|
|
|
set wildignore+=*/.erlang.mk/*,*.beam
|
|
endif
|
|
|
|
setlocal suffixesadd=.erl,.hrl
|
|
|
|
let &l:include = '^\s*-\%(include\|include_lib\)\s*("\zs\f*\ze")'
|
|
let &l:define = '^\s*-\%(define\|record\|type\|opaque\)'
|
|
|
|
let s:erlang_fun_begin = '^\l[A-Za-z0-9_@]*(.*$'
|
|
let s:erlang_fun_end = '^[^%]*\.\s*\(%.*\)\?$'
|
|
|
|
if !exists('*GetErlangFold')
|
|
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
|
|
endif
|
|
|
|
if !exists('*ErlangFoldText')
|
|
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
|
|
endif
|
|
|
|
" The following lines enable the macros/matchit.vim plugin for extended
|
|
" matching with the % key.
|
|
let b:match_ignorecase = 0
|
|
let b:match_words =
|
|
\ '\<\%(begin\|case\|fun\|if\|maybe\|receive\|try\)\>' .
|
|
\ ':\<\%(after\|catch\|else\|of\)\>' .
|
|
\ ':\<end\>,' .
|
|
\ '^\l[A-Za-z0-9_@]*' .
|
|
\ ':^\%(\%(\t\| \{' . shiftwidth() .
|
|
\ '}\)\%([^\t\ %][^%]*\)\?\)\?;\s*\%(%.*\)\?$\|\.[\t\ %]\|\.$'
|
|
let b:match_skip = 's:comment\|string\|erlangmodifier\|erlangquotedatom'
|
|
|
|
let b:undo_ftplugin = "setlocal keywordprg< foldmethod< foldexpr< foldtext<"
|
|
\ . " comments< commentstring< formatoptions< suffixesadd< include<"
|
|
\ . " define<"
|
|
\ . " | unlet b:match_ignorecase b:match_words b:match_skip"
|
|
|
|
let &cpo = s:cpo_save
|
|
unlet s:cpo_save
|
|
|
|
" vim: sw=2 et
|