mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	 a98a6996c2
			
		
	
	a98a6996c2
	
	
	
		
			
			Vim runtime files based on 7.4.384 / hg changeset 7090d7f160f7
Excluding:
  Amiga icons (*.info, icons/)
  doc/hangulin.txt
  tutor/
  spell/
  lang/ (only used for menu translations)
  macros/maze/, macros/hanoi/, macros/life/, macros/urm/
      These were used to test vi compatibility.
  termcap
      "Demonstration of a termcap file (for the Amiga and Archimedes)"
Helped-by: Rich Wareham <rjw57@cam.ac.uk>
Helped-by: John <john.schmidt.h@gmail.com>
Helped-by: Yann <yann@yann-salaun.com>
Helped-by: Christophe Badoit <c.badoit@lesiteimmo.com>
Helped-by: drasill <github@tof2k.com>
Helped-by: Tae Sandoval Murgan <taecilla@gmail.com>
Helped-by: Lowe Thiderman <lowe.thiderman@gmail.com>
		
	
		
			
				
	
	
		
			76 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
| " Vim indent file
 | |
| " Language:	bst
 | |
| " Author:	Tim Pope <vimNOSPAM@tpope.info>
 | |
| " $Id: bst.vim,v 1.1 2007/05/05 18:11:12 vimboss Exp $
 | |
| 
 | |
| if exists("b:did_indent")
 | |
|     finish
 | |
| endif
 | |
| let b:did_indent = 1
 | |
| 
 | |
| setlocal expandtab
 | |
| setlocal indentexpr=GetBstIndent(v:lnum)
 | |
| "setlocal smartindent
 | |
| setlocal cinkeys&
 | |
| setlocal cinkeys-=0#
 | |
| setlocal indentkeys&
 | |
| "setlocal indentkeys+=0%
 | |
| 
 | |
| " Only define the function once.
 | |
| if exists("*GetBstIndent")
 | |
|     finish
 | |
| endif
 | |
| 
 | |
| function! s:prevgood(lnum)
 | |
|     " Find a non-blank line above the current line.
 | |
|     " Skip over comments.
 | |
|     let lnum = a:lnum
 | |
|     while lnum > 0
 | |
|         let lnum = prevnonblank(lnum - 1)
 | |
|         if getline(lnum) !~ '^\s*%.*$'
 | |
|             break
 | |
|         endif
 | |
|     endwhile
 | |
|     return lnum
 | |
| endfunction
 | |
| 
 | |
| function! s:strip(lnum)
 | |
|     let line = getline(a:lnum)
 | |
|     let line = substitute(line,'"[^"]*"','""','g')
 | |
|     let line = substitute(line,'%.*','','')
 | |
|     let line = substitute(line,'^\s\+','','')
 | |
|     return line
 | |
| endfunction
 | |
| 
 | |
| function! s:count(string,char)
 | |
|     let str = substitute(a:string,'[^'.a:char.']','','g')
 | |
|     return strlen(str)
 | |
| endfunction
 | |
| 
 | |
| function! GetBstIndent(lnum) abort
 | |
|     if a:lnum == 1
 | |
|         return 0
 | |
|     endif
 | |
|     let lnum = s:prevgood(a:lnum)
 | |
|     if lnum <= 0
 | |
|         return indent(a:lnum - 1)
 | |
|     endif
 | |
|     let line = s:strip(lnum)
 | |
|     let cline = s:strip(a:lnum)
 | |
|     if cline =~ '^}' && exists("b:current_syntax")
 | |
|         call cursor(a:lnum,indent(a:lnum))
 | |
|         if searchpair('{','','}','bW',"synIDattr(synID(line('.'),col('.'),1),'name') =~? 'comment\\|string'")
 | |
|             if col('.')+1 == col('$')
 | |
|                 return indent('.')
 | |
|             else
 | |
|                 return virtcol('.')-1
 | |
|             endif
 | |
|         endif
 | |
|     endif
 | |
|     let fakeline = substitute(line,'^}','','').matchstr(cline,'^}')
 | |
|     let ind = indent(lnum)
 | |
|     let ind = ind + &sw * s:count(line,'{')
 | |
|     let ind = ind - &sw * s:count(fakeline,'}')
 | |
|     return ind
 | |
| endfunction
 |