mirror of
https://github.com/neovim/neovim.git
synced 2024-12-29 14:41:06 -07:00
64 lines
1.7 KiB
VimL
64 lines
1.7 KiB
VimL
|
" Vim indent file
|
||
|
" Language: Device Tree
|
||
|
" Maintainer: Roland Hieber, Pengutronix <rhi@pengutronix.de>
|
||
|
"
|
||
|
if exists("b:did_indent")
|
||
|
finish
|
||
|
endif
|
||
|
let b:did_indent = 1
|
||
|
|
||
|
setlocal autoindent
|
||
|
setlocal nosmartindent
|
||
|
setlocal indentkeys=o,O,0},0<>>,!<Ctrl-F>
|
||
|
setlocal indentexpr=GetDTSIndent()
|
||
|
setlocal nolisp
|
||
|
|
||
|
let b:undo_indent = 'setl autoindent< smartindent< indentkeys< indentexpr< lisp<'
|
||
|
|
||
|
function GetDTSIndent()
|
||
|
let sw = shiftwidth()
|
||
|
let lnum = v:lnum
|
||
|
let line = getline(lnum)
|
||
|
let prevline = getline(prevnonblank(lnum-1))
|
||
|
let prevind = indent(prevnonblank(lnum-1))
|
||
|
|
||
|
if prevnonblank(lnum-1) < 1
|
||
|
return 0
|
||
|
endif
|
||
|
|
||
|
" Don't indent header and preprocessor directives
|
||
|
if line =~ '^\s*\(/dts-\|#\(include\|define\|undef\|warn\(ing\)\?\|error\|if\(n\?def\)\?\|else\|elif\|endif\)\)'
|
||
|
return 0
|
||
|
|
||
|
" Don't indent /node and &label blocks
|
||
|
elseif line =~ '^\s*[/&].\+{\s*$'
|
||
|
return 0
|
||
|
|
||
|
" Indent to matching bracket or remove one shiftwidth if line begins with } or >
|
||
|
elseif line =~ '^\s*[}>]'
|
||
|
" set cursor to closing bracket on current line
|
||
|
let col = matchend(line, '^\s*[>}]')
|
||
|
call cursor(lnum, col)
|
||
|
|
||
|
" determine bracket type, {} or <>
|
||
|
let pair = strpart('{}<>', stridx('}>', line[col-1]) * 2, 2)
|
||
|
|
||
|
" find matching bracket pair
|
||
|
let pairline = searchpair(pair[0], '', pair[1], 'bW')
|
||
|
|
||
|
if pairline > 0
|
||
|
return indent(pairline)
|
||
|
else
|
||
|
return prevind - sw
|
||
|
endif
|
||
|
|
||
|
" else, add one level of indent if line ends in { or < or = or ,
|
||
|
elseif prevline =~ '[{<=,]$'
|
||
|
return prevind + sw
|
||
|
|
||
|
else
|
||
|
return prevind
|
||
|
endif
|
||
|
|
||
|
endfunction
|