Files
neovim/runtime/indent/just.vim
Christian Clason 8634bd46b2 vim-patch:9.1.1042: filetype: just files are not recognized
Problem:  filetype: just files are not recognized
Solution: adjust filetype detection pattern, detect just shebang line,
          include just ftplugin, indent and syntax plugin
          (Peter Benjamin)

closes: vim/vim#16466

72755b3c8e

Co-authored-by: Peter Benjamin <petermbenjamin@gmail.com>
2025-01-23 09:42:20 +01:00

52 lines
1.3 KiB
VimL

" Vim indent file
" Language: Justfile
" Maintainer: Peter Benjamin <@pbnj>
" Last Change: 2025 Jan 19
" Credits: The original author, Noah Bogart <https://github.com/NoahTheDuke/vim-just/>
" Only load this indent file when no other was loaded yet.
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
setlocal indentexpr=GetJustfileIndent()
setlocal indentkeys=0},0),!^F,o,O,0=''',0=\"\"\"
let b:undo_indent = "setlocal indentexpr< indentkeys<"
if exists("*GetJustfileIndent")
finish
endif
function GetJustfileIndent()
if v:lnum < 2
return 0
endif
let prev_line = getline(v:lnum - 1)
let last_indent = indent(v:lnum - 1)
if getline(v:lnum) =~ "\\v^\\s+%([})]|'''$|\"\"\"$)"
return last_indent - shiftwidth()
elseif prev_line =~ '\V#'
return last_indent
elseif prev_line =~ "\\v%([:{(]|^.*\\S.*%([^']'''|[^\"]\"\"\"))\\s*$"
return last_indent + shiftwidth()
elseif prev_line =~ '\\$'
if v:lnum == 2 || getline(v:lnum - 2) !~ '\\$'
if prev_line =~ '\v:\=@!'
return last_indent + shiftwidth() + shiftwidth()
else
return last_indent + shiftwidth()
endif
endif
elseif v:lnum > 2 && getline(v:lnum - 2) =~ '\\$'
return last_indent - shiftwidth()
elseif prev_line =~ '\v:\s*%(\h|\()' && prev_line !~ '\V:='
return last_indent + shiftwidth()
endif
return last_indent
endfunction