diff options
| author | Adam Stankiewicz <sheerun@sher.pl> | 2017-12-06 13:05:56 +0100 | 
|---|---|---|
| committer | Adam Stankiewicz <sheerun@sher.pl> | 2017-12-06 13:05:56 +0100 | 
| commit | 9fe009095afdb86f6f771109ac454ccfc5340f31 (patch) | |
| tree | 1bb6b2fd7e2ff2b94bd3dd8ce6fdb735e873237b /ftplugin/julia.vim | |
| parent | dce9e8dec5ef51730291c7bbff3e3997433eabbd (diff) | |
| download | vim-polyglot-9fe009095afdb86f6f771109ac454ccfc5340f31.tar.gz vim-polyglot-9fe009095afdb86f6f771109ac454ccfc5340f31.zip | |
Change julia provider to JuliaEditorSupport/julia-vim, closes #253
Diffstat (limited to '')
| -rw-r--r-- | ftplugin/julia.vim | 99 | 
1 files changed, 99 insertions, 0 deletions
| 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 <carlobaldassi@gmail.com> +" 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*\)\@<!\|\%(@\s*.\s*\)\@<=\)\<\%(\%(staged\)\?function\|macro\|begin\|mutable\s\+struct\|\%(mutable\s\+\)\@<!struct\|\%(abstract\|primitive\)\s\+type\|\%(\(abstract\|primitive\)\s\+\)\@<!type\|immutable\|let\|do\|\%(bare\)\?module\|quote\|if\|for\|while\|try\)\>' +  let s:macro_regex = '@\%(#\@!\S\)\+\s\+' +  let s:nomacro = '\%(' . s:macro_regex . '\)\@<!' +  let s:yesmacro = s:nomacro . '\%('. s:macro_regex . '\)\+' +  let b:julia_begin_keywordsm = '\%(' . s:yesmacro . b:julia_begin_keywords . '\)\|' +        \ . '\%(' . s:nomacro . b:julia_begin_keywords . '\)' +  let b:julia_end_keywords = '\<end\>' + +  " 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") =~ ' +        \ . '"\\<julia\\%(Comprehension\\%(For\\|If\\)\\|RangeEnd\\|SymbolS\\?\\|Comment[LM]\\|\\%([bv]\\|ip\\|MIME\\|Shell\\|Doc\\)\\?String\\|RegEx\\)\\>"' + +  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 | 
