neovim

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

hamster.vim (1692B)


      1 " Vim indent file
      2 " Language:    Hamster Script 
      3 " Version:     2.0.6.1
      4 " Last Change: 2021 Oct 11
      5 " Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
      6 " Download: https://www.vim.org/scripts/script.php?script_id=1099
      7 "
      8 "    2.0.6.1 (Oct 2021)
      9 "        Added b:undo_indent
     10 "        Added cpo check
     11 "
     12 
     13 " Only load this indent file when no other was loaded.
     14 if exists("b:did_indent")
     15  finish
     16 endif
     17 let b:did_indent = 1
     18 
     19 setlocal indentkeys+==~if,=~else,=~endif,=~endfor,=~endwhile
     20 setlocal indentkeys+==~do,=~until,=~while,=~repeat,=~for,=~loop
     21 setlocal indentkeys+==~sub,=~endsub
     22 
     23 let b:undo_indent = "setl indentkeys<"
     24 
     25 " Define the appropriate indent function but only once
     26 setlocal indentexpr=HamGetFreeIndent()
     27 if exists("*HamGetFreeIndent")
     28  finish
     29 endif
     30 
     31 let s:keepcpo = &cpo
     32 set cpo&vim
     33 
     34 function HamGetIndent(lnum)
     35  let ind = indent(a:lnum)
     36  let prevline=getline(a:lnum)
     37 
     38  " Add a shiftwidth to statements following if,  else, elseif,
     39  " case, select, default, do, until, while, for, start
     40  if prevline =~? '^\s*\<\(if\|else\%(if\)\?\|for\|repeat\|do\|while\|sub\)\>' 
     41    let ind = ind + shiftwidth()
     42  endif
     43 
     44  " Subtract a shiftwidth from else, elseif, end(if|while|for), until
     45  let line = getline(v:lnum)
     46  if line =~? '^\s*\(else\|elseif\|loop\|until\|end\%(if\|while\|for\|sub\)\)\>'
     47    let ind = ind - shiftwidth()
     48  endif
     49 
     50  return ind
     51 endfunction
     52 
     53 function HamGetFreeIndent()
     54  " Find the previous non-blank line
     55  let lnum = prevnonblank(v:lnum - 1)
     56 
     57  " Use zero indent at the top of the file
     58  if lnum == 0
     59    return 0
     60  endif
     61 
     62  let ind=HamGetIndent(lnum)
     63  return ind
     64 endfunction
     65 
     66 " Restore:
     67 let &cpo = s:keepcpo
     68 unlet s:keepcpo
     69 
     70 " vim:sw=2 tw=80