" Vim indent file (experimental). " Language: Astro " Author: Wuelner Martínez " Maintainer: Wuelner Martínez " URL: https://github.com/wuelnerdotexe/vim-astro " Last Change: 2022 Aug 07 " Based On: Evan Lecklider's vim-svelte " Changes: See https://github.com/evanleck/vim-svelte " Credits: See vim-svelte on github " Only load this indent file when no other was loaded yet. if exists('b:did_indent') finish endif let b:html_indent_script1 = 'inc' let b:html_indent_style1 = 'inc' " Embedded HTML indent. runtime! indent/html.vim let s:html_indent = &l:indentexpr unlet b:did_indent let b:did_indent = 1 setlocal indentexpr=GetAstroIndent() setlocal indentkeys=<>>,/,0{,{,},0},0),0],0\,<<>,,!^F,*,o,O,e,; let b:undo_indent = 'setl inde< indk<' " Only define the function once. if exists('*GetAstroIndent') finish endif let s:cpoptions_save = &cpoptions setlocal cpoptions&vim function! GetAstroIndent() let l:current_line_number = v:lnum if l:current_line_number == 0 return 0 endif let l:current_line = getline(l:current_line_number) if l:current_line =~ '^\s*', '', '', 'bW') && \ l:previous_line =~ ';$' && l:current_line !~ '}' return l:previous_line_indent endif if synID(l:previous_line_number, match( \ l:previous_line, '\S' \ ) + 1, 0) == hlID('htmlTag') && synID(l:current_line_number, match( \ l:current_line, '\S' \ ) + 1, 0) != hlID('htmlEndTag') let l:indents_match = l:indent == l:previous_line_indent let l:previous_closes = l:previous_line =~ '/>$' if l:indents_match && \ !l:previous_closes && l:previous_line =~ '<\(\u\|\l\+:\l\+\)' return l:previous_line_indent + shiftwidth() elseif !l:indents_match && l:previous_closes return l:previous_line_indent endif endif return l:indent endfunction let &cpoptions = s:cpoptions_save unlet s:cpoptions_save " vim: ts=8