mirror of
https://github.com/neovim/neovim.git
synced 2024-12-24 21:25:04 -07:00
0124a7bfa9
Update runtime files
75ab590f85
omit builtin.txt change to `expand()` (depends on 8.2.4726)
131 lines
4.3 KiB
VimL
131 lines
4.3 KiB
VimL
" Vim indent file
|
|
" Language: Kuka Robot Language
|
|
" Maintainer: Patrick Meiser-Knosowski <knosowski@graeffrobotics.de>
|
|
" Version: 3.0.0
|
|
" Last Change: 15. Apr 2022
|
|
" Credits: Based on indent/vim.vim
|
|
|
|
" Only load this indent file when no other was loaded.
|
|
if exists("b:did_indent")
|
|
finish
|
|
endif
|
|
let b:did_indent = 1
|
|
|
|
setlocal nolisp
|
|
setlocal nocindent
|
|
setlocal nosmartindent
|
|
setlocal autoindent
|
|
setlocal indentexpr=GetKrlIndent()
|
|
setlocal indentkeys=!^F,o,O,=~end,0=~else,0=~case,0=~default,0=~until,0=~continue,=~part
|
|
let b:undo_indent = "setlocal lisp< cindent< smartindent< autoindent< indentexpr< indentkeys<"
|
|
|
|
if get(g:,'krlSpaceIndent',1)
|
|
" Use spaces, not tabs, for indention, 2 is enough.
|
|
" More or even tabs would waste valuable space on the teach pendant.
|
|
setlocal softtabstop=2
|
|
setlocal shiftwidth=2
|
|
setlocal expandtab
|
|
setlocal shiftround
|
|
let b:undo_indent = b:undo_indent." softtabstop< shiftwidth< expandtab< shiftround<"
|
|
endif
|
|
|
|
" Only define the function once.
|
|
if exists("*GetKrlIndent")
|
|
finish
|
|
endif
|
|
let s:keepcpo = &cpo
|
|
set cpo&vim
|
|
|
|
function GetKrlIndent() abort
|
|
|
|
let currentLine = getline(v:lnum)
|
|
if currentLine =~? '\v^;(\s*(end)?fold>)@!' && !get(g:, 'krlCommentIndent', 0)
|
|
" If current line has a ; in column 1 and is no fold, keep zero indent.
|
|
" This may be usefull if code is commented out at the first column.
|
|
return 0
|
|
endif
|
|
|
|
" Find a non-blank line above the current line.
|
|
let preNoneBlankLineNum = s:KrlPreNoneBlank(v:lnum - 1)
|
|
if preNoneBlankLineNum == 0
|
|
" At the start of the file use zero indent.
|
|
return 0
|
|
endif
|
|
|
|
let preNoneBlankLine = getline(preNoneBlankLineNum)
|
|
let ind = indent(preNoneBlankLineNum)
|
|
|
|
" Define add 'shiftwidth' pattern
|
|
let addShiftwidthPattern = '\v^\s*('
|
|
if get(g:, 'krlIndentBetweenDef', 1)
|
|
let addShiftwidthPattern ..= '(global\s+)?def(fct|dat)?\s+\$?\w'
|
|
let addShiftwidthPattern ..= '|'
|
|
endif
|
|
let addShiftwidthPattern ..= 'if>|while>|for>|loop>'
|
|
let addShiftwidthPattern ..= '|else>'
|
|
let addShiftwidthPattern ..= '|case>|default>'
|
|
let addShiftwidthPattern ..= '|repeat>'
|
|
let addShiftwidthPattern ..= '|skip>|(ptp_)?spline>'
|
|
let addShiftwidthPattern ..= '|time_block\s+(start|part)>'
|
|
let addShiftwidthPattern ..= '|const_vel\s+start>'
|
|
let addShiftwidthPattern ..= ')'
|
|
|
|
" Define Subtract 'shiftwidth' pattern
|
|
let subtractShiftwidthPattern = '\v^\s*('
|
|
if get(g:, 'krlIndentBetweenDef', 1)
|
|
let subtractShiftwidthPattern ..= 'end(fct|dat)?>'
|
|
let subtractShiftwidthPattern ..= '|'
|
|
endif
|
|
let subtractShiftwidthPattern ..= 'end(if|while|for|loop)>'
|
|
let subtractShiftwidthPattern ..= '|else>'
|
|
let subtractShiftwidthPattern ..= '|case>|default>|endswitch>'
|
|
let subtractShiftwidthPattern ..= '|until>'
|
|
let subtractShiftwidthPattern ..= '|end(skip|spline)>'
|
|
let subtractShiftwidthPattern ..= '|time_block\s+(part|end)>'
|
|
let subtractShiftwidthPattern ..= '|const_vel\s+end>'
|
|
let subtractShiftwidthPattern ..= ')'
|
|
|
|
" Add shiftwidth
|
|
if preNoneBlankLine =~? addShiftwidthPattern
|
|
let ind += &sw
|
|
endif
|
|
|
|
" Subtract shiftwidth
|
|
if currentLine =~? subtractShiftwidthPattern
|
|
let ind = ind - &sw
|
|
endif
|
|
|
|
" First case after a switch gets the indent of the switch.
|
|
if currentLine =~? '\v^\s*case>'
|
|
\&& preNoneBlankLine =~? '\v^\s*switch>'
|
|
let ind = ind + &sw
|
|
endif
|
|
|
|
" align continue with the following instruction
|
|
if currentLine =~? '\v^\s*continue>'
|
|
\&& getline(v:lnum + 1) =~? subtractShiftwidthPattern
|
|
let ind = ind - &sw
|
|
endif
|
|
|
|
return ind
|
|
endfunction
|
|
|
|
" This function works almost like prevnonblank() but handles &-headers,
|
|
" comments and continue instructions like blank lines
|
|
function s:KrlPreNoneBlank(lnum) abort
|
|
|
|
let nPreNoneBlank = prevnonblank(a:lnum)
|
|
|
|
while nPreNoneBlank > 0 && getline(nPreNoneBlank) =~? '\v^\s*(\&\w\+|;|continue>)'
|
|
" Previouse none blank line irrelevant. Look further aback.
|
|
let nPreNoneBlank = prevnonblank(nPreNoneBlank - 1)
|
|
endwhile
|
|
|
|
return nPreNoneBlank
|
|
endfunction
|
|
|
|
let &cpo = s:keepcpo
|
|
unlet s:keepcpo
|
|
|
|
" vim:sw=2 sts=2 et
|