mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	
		
			
	
	
		
			91 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
		
		
			
		
	
	
			91 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
|   | " Vim indent file | ||
|  | " Language:	Dylan | ||
|  | " Version:	0.01 | ||
|  | " Last Change:	2003 Feb 04 | ||
|  | " Maintainer:	Brent A. Fulgham <bfulgham@debian.org> | ||
|  | 
 | ||
|  | " Only load this indent file when no other was loaded. | ||
|  | if exists("b:did_indent") | ||
|  |   finish | ||
|  | endif | ||
|  | let b:did_indent = 1 | ||
|  | 
 | ||
|  | setlocal indentkeys+==~begin,=~block,=~case,=~cleanup,=~define,=~end,=~else,=~elseif,=~exception,=~for,=~finally,=~if,=~otherwise,=~select,=~unless,=~while | ||
|  | 
 | ||
|  | " Define the appropriate indent function but only once | ||
|  | setlocal indentexpr=DylanGetIndent() | ||
|  | if exists("*DylanGetIndent") | ||
|  |   finish | ||
|  | endif | ||
|  | 
 | ||
|  | function DylanGetIndent() | ||
|  |   " Get the line to be indented | ||
|  |   let cline = getline(v:lnum) | ||
|  | 
 | ||
|  |   " Don't reindent comments on first column | ||
|  |   if cline =~ '^/\[/\*]' | ||
|  |     return 0 | ||
|  |   endif | ||
|  | 
 | ||
|  |   "Find the previous non-blank line | ||
|  |   let lnum = prevnonblank(v:lnum - 1) | ||
|  |   "Use zero indent at the top of the file | ||
|  |   if lnum == 0 | ||
|  |     return 0 | ||
|  |   endif | ||
|  | 
 | ||
|  |   let prevline=getline(lnum) | ||
|  |   let ind = indent(lnum) | ||
|  |   let chg = 0 | ||
|  | 
 | ||
|  |   " If previous line was a comment, use its indent | ||
|  |   if prevline =~ '^\s*//' | ||
|  |     return ind | ||
|  |   endif | ||
|  | 
 | ||
|  |   " If previous line was a 'define', indent | ||
|  |   if prevline =~? '\(^\s*\(begin\|block\|case\|define\|else\|elseif\|for\|finally\|if\|select\|unless\|while\)\|\s*\S*\s*=>$\)' | ||
|  |     let chg = &sw | ||
|  |   " local methods indent the shift-width, plus 6 for the 'local' | ||
|  |   elseif prevline =~? '^\s*local' | ||
|  |     let chg = &sw + 6 | ||
|  |   " If previous line was a let with no closing semicolon, indent | ||
|  |   elseif prevline =~? '^\s*let.*[^;]\s*$' | ||
|  |     let chg = &sw | ||
|  |   " If previous line opened a parenthesis, and did not close it, indent | ||
|  |   elseif prevline =~ '^.*(\s*[^)]*\((.*)\)*[^)]*$' | ||
|  |     return = match( prevline, '(.*\((.*)\|[^)]\)*.*$') + 1 | ||
|  |   "elseif prevline =~ '^.*(\s*[^)]*\((.*)\)*[^)]*$' | ||
|  |   elseif prevline =~ '^[^(]*)\s*$' | ||
|  |     " This line closes a parenthesis.  Find opening | ||
|  |     let curr_line = prevnonblank(lnum - 1) | ||
|  |     while curr_line >= 0 | ||
|  |       let str = getline(curr_line) | ||
|  |       if str !~ '^.*(\s*[^)]*\((.*)\)*[^)]*$' | ||
|  | 	let curr_line = prevnonblank(curr_line - 1) | ||
|  |       else | ||
|  | 	break | ||
|  |       endif | ||
|  |     endwhile | ||
|  |     if curr_line < 0 | ||
|  |       return -1 | ||
|  |     endif | ||
|  |     let ind = indent(curr_line) | ||
|  |     " Although we found the closing parenthesis, make sure this | ||
|  |     " line doesn't start with an indentable command: | ||
|  |     let curr_str = getline(curr_line) | ||
|  |     if curr_str =~? '^\s*\(begin\|block\|case\|define\|else\|elseif\|for\|finally\|if\|select\|unless\|while\)' | ||
|  |       let chg = &sw | ||
|  |     endif | ||
|  |   endif | ||
|  | 
 | ||
|  |   " If a line starts with end, un-indent (even if we just indented!) | ||
|  |   if cline =~? '^\s*\(cleanup\|end\|else\|elseif\|exception\|finally\|otherwise\)' | ||
|  |     let chg = chg - &sw | ||
|  |   endif | ||
|  | 
 | ||
|  |   return ind + chg | ||
|  | endfunction | ||
|  | 
 | ||
|  | " vim:sw=2 tw=130 |