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>
		
	
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			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
 |