yacc.vim (858B)
1 " Vim indent file 2 " Language: YACC input file 3 " Maintainer: Doug Kearns <dougkearns@gmail.com> 4 " Previous Maintainer: Nikolai Weibull <now@bitwi.se> 5 " Last Change: 2022 April 25 6 7 " Only load this indent file when no other was loaded. 8 if exists("b:did_indent") 9 finish 10 endif 11 12 let b:did_indent = 1 13 14 setlocal indentexpr=GetYaccIndent() 15 setlocal indentkeys=!^F,o,O 16 setlocal nosmartindent 17 18 let b:undo_indent = "setl inde< indk< si<" 19 20 " Only define the function once. 21 if exists("*GetYaccIndent") 22 finish 23 endif 24 25 function GetYaccIndent() 26 if v:lnum == 1 27 return 0 28 endif 29 30 let ind = indent(v:lnum - 1) 31 let line = getline(v:lnum - 1) 32 33 if line == '' 34 let ind = 0 35 elseif line =~ '^\w\+\s*:' 36 let ind = ind + matchend(line, '^\w\+\s*') 37 elseif line =~ '^\s*;' 38 let ind = 0 39 else 40 let ind = indent(v:lnum) 41 endif 42 43 return ind 44 endfunction