mirror of
https://github.com/vim/vim
synced 2025-03-15 06:17:51 +01:00
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: #16466 Signed-off-by: Peter Benjamin <petermbenjamin@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
51 lines
1.3 KiB
VimL
51 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
|