From 9fe009095afdb86f6f771109ac454ccfc5340f31 Mon Sep 17 00:00:00 2001 From: Adam Stankiewicz Date: Wed, 6 Dec 2017 13:05:56 +0100 Subject: Change julia provider to JuliaEditorSupport/julia-vim, closes #253 --- ftplugin/julia.vim | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 ftplugin/julia.vim (limited to 'ftplugin/julia.vim') diff --git a/ftplugin/julia.vim b/ftplugin/julia.vim new file mode 100644 index 00000000..2d1bcb49 --- /dev/null +++ b/ftplugin/julia.vim @@ -0,0 +1,99 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'julia') == -1 + +" Vim filetype plugin file +" Language: Julia +" Maintainer: Carlo Baldassi +" Last Change: 2014 may 29 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:save_cpo = &cpo +set cpo-=C + +setlocal include=^\\s*\\%(reload\\\|include\\)\\> +setlocal suffixesadd=.jl +setlocal comments=:# +setlocal commentstring=#=%s=# +setlocal cinoptions+=#1 +setlocal define=^\\s*macro\\> + +let b:julia_vim_loaded = 1 + +let b:undo_ftplugin = "setlocal include< suffixesadd< comments< commentstring<" + \ . " define< shiftwidth< expandtab< indentexpr< indentkeys< cinoptions< omnifunc<" + \ . " | unlet! b:julia_vim_loaded" + +" MatchIt plugin support +if exists("loaded_matchit") + let b:match_ignorecase = 0 + + " note: begin_keywords must contain all blocks in order + " for nested-structures-skipping to work properly + let b:julia_begin_keywords = '\%(\%(\.\s*\)\@' + let s:macro_regex = '@\%(#\@!\S\)\+\s\+' + let s:nomacro = '\%(' . s:macro_regex . '\)\@' + + " note: this function relies heavily on the syntax file + function! JuliaGetMatchWords() + let [l,c] = [line('.'),col('.')] + let attr = synIDattr(synID(l, c, 1),"name") + let c1 = c + while attr == 'juliaMacro' + normal! W + if line('.') > l || col('.') == c1 + call cursor(l, c) + return '' + endif + let attr = synIDattr(synID(l, col('.'), 1),"name") + let c1 = col('.') + endwhile + call cursor(l, c) + if attr == 'juliaConditional' + return b:julia_begin_keywordsm . ':\<\%(elseif\|else\)\>:' . b:julia_end_keywords + elseif attr =~ '\<\%(juliaRepeat\|juliaRepKeyword\)\>' + return b:julia_begin_keywordsm . ':\<\%(break\|continue\)\>:' . b:julia_end_keywords + elseif attr == 'juliaBlKeyword' + return b:julia_begin_keywordsm . ':' . b:julia_end_keywords + elseif attr == 'juliaException' + return b:julia_begin_keywordsm . ':\<\%(catch\|finally\)\>:' . b:julia_end_keywords + endif + return '\<\>:\<\>' + endfunction + + let b:match_words = 'JuliaGetMatchWords()' + + " we need to skip everything within comments, strings and + " the 'end' keyword when it is used as a range rather than as + " the end of a block + let b:match_skip = 'synIDattr(synID(line("."),col("."),1),"name") =~ ' + \ . '"\\"' + + let b:undo_ftplugin = b:undo_ftplugin + \ . " | unlet! b:match_words b:match_skip b:match_ignorecase" + \ . " | unlet! b:julia_begin_keywords b:julia_end_keywords" + \ . " | delfunction JuliaGetMatchWords" + \ . " | call julia_blocks#remove_mappings()" + + if get(g:, "julia_blocks", 1) + call julia_blocks#init_mappings() + let b:undo_ftplugin .= " | call julia_blocks#remove_mappings()" + endif + +endif + +if has("gui_win32") + let b:browsefilter = "Julia Source Files (*.jl)\t*.jl\n" + let b:undo_ftplugin = b:undo_ftplugin . " | unlet! b:browsefilter" +endif + +let &cpo = s:save_cpo +unlet s:save_cpo + +endif -- cgit v1.2.3