mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
" Vim indent file
 | 
						|
" Language:            C#
 | 
						|
" Maintainer:          Nick Jensen <nickspoon@gmail.com>
 | 
						|
" Former Maintainers:  Aquila Deus
 | 
						|
"                      Johannes Zellner <johannes@zellner.org>
 | 
						|
" Last Change:         2018-11-21
 | 
						|
" Filenames:           *.cs
 | 
						|
" License:             Vim (see :h license)
 | 
						|
" Repository:          https://github.com/nickspoons/vim-cs
 | 
						|
"
 | 
						|
 | 
						|
" Only load this indent file when no other was loaded.
 | 
						|
if exists('b:did_indent')
 | 
						|
  finish
 | 
						|
endif
 | 
						|
let b:did_indent = 1
 | 
						|
 | 
						|
let s:save_cpo = &cpoptions
 | 
						|
set cpoptions&vim
 | 
						|
 | 
						|
 | 
						|
setlocal indentexpr=GetCSIndent(v:lnum)
 | 
						|
 | 
						|
function! s:IsCompilerDirective(line)
 | 
						|
  return a:line =~? '^\s*#'
 | 
						|
endf
 | 
						|
 | 
						|
function! s:IsAttributeLine(line)
 | 
						|
  return a:line =~? '^\s*\[[A-Za-z]' && a:line =~? '\]$'
 | 
						|
endf
 | 
						|
 | 
						|
function! s:FindPreviousNonCompilerDirectiveLine(start_lnum)
 | 
						|
  for delta in range(0, a:start_lnum)
 | 
						|
    let lnum = a:start_lnum - delta
 | 
						|
    let line = getline(lnum)
 | 
						|
    let is_directive = s:IsCompilerDirective(line)
 | 
						|
    if !is_directive
 | 
						|
      return lnum
 | 
						|
    endif
 | 
						|
  endfor
 | 
						|
  return 0
 | 
						|
endf
 | 
						|
 | 
						|
function! GetCSIndent(lnum) abort
 | 
						|
  " Hit the start of the file, use zero indent.
 | 
						|
  if a:lnum == 0
 | 
						|
    return 0
 | 
						|
  endif
 | 
						|
 | 
						|
  let this_line = getline(a:lnum)
 | 
						|
 | 
						|
  " Compiler directives use zero indent if so configured.
 | 
						|
  let is_first_col_macro = s:IsCompilerDirective(this_line) && stridx(&l:cinkeys, '0#') >= 0
 | 
						|
  if is_first_col_macro
 | 
						|
    return cindent(a:lnum)
 | 
						|
  endif
 | 
						|
 | 
						|
  let lnum = s:FindPreviousNonCompilerDirectiveLine(a:lnum - 1)
 | 
						|
  let previous_code_line = getline(lnum)
 | 
						|
  if s:IsAttributeLine(previous_code_line)
 | 
						|
    let ind = indent(lnum)
 | 
						|
    return ind
 | 
						|
  else
 | 
						|
    return cindent(a:lnum)
 | 
						|
  endif
 | 
						|
endfunction
 | 
						|
 | 
						|
let b:undo_indent = 'setlocal indentexpr<'
 | 
						|
 | 
						|
let &cpoptions = s:save_cpo
 | 
						|
unlet s:save_cpo
 | 
						|
 | 
						|
" vim:et:sw=2:sts=2
 |