neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

rpl.vim (1863B)


      1 " Vim indent file
      2 " Language:	RPL/2
      3 " Version:	0.2
      4 " Last Change:	2017 Jun 13
      5 " Maintainer:	BERTRAND Joël <rpl2@free.fr>
      6 
      7 " Only load this indent file when no other was loaded.
      8 if exists("b:did_indent")
      9  finish
     10 endif
     11 let b:did_indent = 1
     12 
     13 setlocal autoindent
     14 setlocal indentkeys+==~end,=~case,=~if,=~then,=~else,=~do,=~until,=~while,=~repeat,=~select,=~default,=~for,=~start,=~next,=~step,<<>,<>>
     15 
     16 " Define the appropriate indent function but only once
     17 setlocal indentexpr=RplGetFreeIndent()
     18 if exists("*RplGetFreeIndent")
     19  finish
     20 endif
     21 
     22 let b:undo_indent = "set ai< indentkeys< indentexpr<"
     23 
     24 function RplGetIndent(lnum)
     25  let ind = indent(a:lnum)
     26  let prevline=getline(a:lnum)
     27  " Strip tail comment
     28  let prevstat=substitute(prevline, '!.*$', '', '')
     29 
     30  " Add a shiftwidth to statements following if, iferr, then, else, elseif,
     31  " case, select, default, do, until, while, repeat, for, start
     32  if prevstat =~? '\<\(if\|iferr\|do\|while\)\>' && prevstat =~? '\<end\>'
     33  elseif prevstat =~? '\(^\|\s\+\)<<\($\|\s\+\)' && prevstat =~? '\s\+>>\($\|\s\+\)'
     34  elseif prevstat =~? '\<\(if\|iferr\|then\|else\|elseif\|select\|case\|do\|until\|while\|repeat\|for\|start\|default\)\>' || prevstat =~? '\(^\|\s\+\)<<\($\|\s\+\)'
     35    let ind = ind + shiftwidth()
     36  endif
     37 
     38  " Subtract a shiftwidth from then, else, elseif, end, until, repeat, next,
     39  " step
     40  let line = getline(v:lnum)
     41  if line =~? '^\s*\(then\|else\|elseif\|until\|repeat\|next\|step\|default\|end\)\>'
     42    let ind = ind - shiftwidth()
     43  elseif line =~? '^\s*>>\($\|\s\+\)'
     44    let ind = ind - shiftwidth()
     45  endif
     46 
     47  return ind
     48 endfunction
     49 
     50 function RplGetFreeIndent()
     51  " Find the previous non-blank line
     52  let lnum = prevnonblank(v:lnum - 1)
     53 
     54  " Use zero indent at the top of the file
     55  if lnum == 0
     56    return 0
     57  endif
     58 
     59  let ind=RplGetIndent(lnum)
     60  return ind
     61 endfunction
     62 
     63 " vim:sw=2 tw=130