mirror of
https://github.com/neovim/neovim.git
synced 2024-12-25 05:35:10 -07:00
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
|