/
usr
/
share
/
vim
/
vim74
/
indent
/
/usr/share/vim/vim74/indent
mkdir
upload
Name
Size
Mode
Actions
aap.vim
265
0644
edit
dl
rm
ada.vim
11147
0644
edit
dl
rm
ant.vim
290
0644
edit
dl
rm
automake.vim
231
0644
edit
dl
rm
awk.vim
7748
0644
edit
dl
rm
bib.vim
346
0644
edit
dl
rm
bst.vim
1919
0644
edit
dl
rm
c.vim
325
0644
edit
dl
rm
cdl.vim
4172
0644
edit
dl
rm
ch.vim
470
0644
edit
dl
rm
chaiscript.vim
1135
0644
edit
dl
rm
changelog.vim
264
0644
edit
dl
rm
clojure.vim
12132
0644
edit
dl
rm
cmake.vim
2754
0644
edit
dl
rm
cobol.vim
8197
0644
edit
dl
rm
config.vim
2166
0644
edit
dl
rm
cpp.vim
329
0644
edit
dl
rm
cs.vim
327
0644
edit
dl
rm
css.vim
1719
0644
edit
dl
rm
cucumber.vim
2624
0644
edit
dl
rm
cuda.vim
305
0644
edit
dl
rm
d.vim
510
0644
edit
dl
rm
dictconf.vim
325
0644
edit
dl
rm
dictdconf.vim
326
0644
edit
dl
rm
docbk.vim
324
0644
edit
dl
rm
dtd.vim
11668
0644
edit
dl
rm
dtrace.vim
451
0644
edit
dl
rm
dylan.vim
2662
0644
edit
dl
rm
eiffel.vim
3208
0644
edit
dl
rm
erlang.vim
46235
0644
edit
dl
rm
eruby.vim
2161
0644
edit
dl
rm
eterm.vim
638
0644
edit
dl
rm
falcon.vim
13982
0644
edit
dl
rm
fortran.vim
6559
0644
edit
dl
rm
framescript.vim
786
0644
edit
dl
rm
gitconfig.vim
817
0644
edit
dl
rm
gitolite.vim
996
0644
edit
dl
rm
haml.vim
2189
0644
edit
dl
rm
hamster.vim
1407
0644
edit
dl
rm
html.vim
14812
0644
edit
dl
rm
htmldjango.vim
273
0644
edit
dl
rm
idlang.vim
1566
0644
edit
dl
rm
ishd.vim
1841
0644
edit
dl
rm
java.vim
4115
0644
edit
dl
rm
javascript.vim
336
0644
edit
dl
rm
jsp.vim
462
0644
edit
dl
rm
ld.vim
1753
0644
edit
dl
rm
lifelines.vim
637
0644
edit
dl
rm
liquid.vim
1879
0644
edit
dl
rm
lisp.vim
353
0644
edit
dl
rm
logtalk.vim
1690
0644
edit
dl
rm
lua.vim
1914
0644
edit
dl
rm
mail.vim
308
0644
edit
dl
rm
make.vim
3431
0644
edit
dl
rm
matlab.vim
1928
0644
edit
dl
rm
mma.vim
2227
0644
edit
dl
rm
mp.vim
6527
0644
edit
dl
rm
objc.vim
1645
0644
edit
dl
rm
ocaml.vim
9110
0644
edit
dl
rm
occam.vim
4634
0644
edit
dl
rm
pascal.vim
5653
0644
edit
dl
rm
perl.vim
5811
0644
edit
dl
rm
perl6.vim
3503
0644
edit
dl
rm
php.vim
19423
0644
edit
dl
rm
postscr.vim
1622
0644
edit
dl
rm
pov.vim
2643
0644
edit
dl
rm
prolog.vim
1454
0644
edit
dl
rm
pyrex.vim
326
0644
edit
dl
rm
python.vim
5744
0644
edit
dl
rm
r.vim
14786
0644
edit
dl
rm
readline.vim
681
0644
edit
dl
rm
README.txt
1639
0644
edit
dl
rm
rpl.vim
1835
0644
edit
dl
rm
rst.vim
1387
0644
edit
dl
rm
ruby.vim
17546
0644
edit
dl
rm
sass.vim
1018
0644
edit
dl
rm
scheme.vim
241
0644
edit
dl
rm
scss.vim
191
0644
edit
dl
rm
sdl.vim
2767
0644
edit
dl
rm
sh.vim
4040
0644
edit
dl
rm
sml.vim
6418
0644
edit
dl
rm
sql.vim
1204
0644
edit
dl
rm
sqlanywhere.vim
13075
0644
edit
dl
rm
tcl.vim
1602
0644
edit
dl
rm
tcsh.vim
1243
0644
edit
dl
rm
tex.vim
9695
0644
edit
dl
rm
tf.vim
1499
0644
edit
dl
rm
tilde.vim
994
0644
edit
dl
rm
treetop.vim
677
0644
edit
dl
rm
vb.vim
2044
0644
edit
dl
rm
verilog.vim
7620
0644
edit
dl
rm
vhdl.vim
13801
0644
edit
dl
rm
vim.vim
2830
0644
edit
dl
rm
xf86conf.vim
679
0644
edit
dl
rm
xhtml.vim
269
0644
edit
dl
rm
xinetd.vim
1201
0644
edit
dl
rm
xml.vim
2840
0644
edit
dl
rm
xsd.vim
253
0644
edit
dl
rm
xslt.vim
297
0644
edit
dl
rm
yacc.vim
769
0644
edit
dl
rm
yaml.vim
4117
0644
edit
dl
rm
zimbu.vim
3891
0644
edit
dl
rm
zsh.vim
231
0644
edit
dl
rm
Edit:
/usr/share/vim/vim74/indent/falcon.vim
(13982B)
" Vim indent file " Language: Falcon " Maintainer: Steven Oliver <oliver.steven@gmail.com> " Website: https://steveno@github.com/steveno/falconpl-vim.git " Credits: This is, to a great extent, a copy n' paste of ruby.vim. " 1. Setup {{{1 " ============ " Only load this indent file when no other was loaded. if exists("b:did_indent") finish endif let b:did_indent = 1 setlocal nosmartindent " Setup indent function and when to use it setlocal indentexpr=FalconGetIndent(v:lnum) setlocal indentkeys=0{,0},0),0],!^F,o,O,e setlocal indentkeys+==~case,=~catch,=~default,=~elif,=~else,=~end,=~\" " Define the appropriate indent function but only once if exists("*FalconGetIndent") finish endif let s:cpo_save = &cpo set cpo&vim " 2. Variables {{{1 " ============ " Regex of syntax group names that are strings AND comments let s:syng_strcom = '\<falcon\%(String\|StringEscape\|Comment\)\>' " Regex of syntax group names that are strings let s:syng_string = '\<falcon\%(String\|StringEscape\)\>' " Regex that defines blocks. " " Note that there's a slight problem with this regex and s:continuation_regex. " Code like this will be matched by both: " " method_call do |(a, b)| " " The reason is that the pipe matches a hanging "|" operator. " let s:block_regex = \ '\%(\<do:\@!\>\|%\@<!{\)\s*\%(|\s*(*\s*\%([*@&]\=\h\w*,\=\s*\)\%(,\s*(*\s*[*@&]\=\h\w*\s*)*\s*\)*|\)\=\s*\%(#.*\)\=$' let s:block_continuation_regex = '^\s*[^])}\t ].*'.s:block_regex " Regex that defines continuation lines. " TODO: this needs to deal with if ...: and so on let s:continuation_regex = \ '\%(%\@<![({[\\.,:*/%+]\|\<and\|\<or\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$' " Regex that defines bracket continuations let s:bracket_continuation_regex = '%\@<!\%([({[]\)\s*\%(#.*\)\=$' " Regex that defines continuation lines, not including (, {, or [. let s:non_bracket_continuation_regex = '\%([\\.,:*/%+]\|\<and\|\<or\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$' " Keywords to indent on let s:falcon_indent_keywords = '^\s*\(case\|catch\|class\|enum\|default\|elif\|else' . \ '\|for\|function\|if.*"[^"]*:.*"\|if \(\(:\)\@!.\)*$\|loop\|object\|select' . \ '\|switch\|try\|while\|\w*\s*=\s*\w*([$\)' " Keywords to deindent on let s:falcon_deindent_keywords = '^\s*\(case\|catch\|default\|elif\|else\|end\)' " 3. Functions {{{1 " ============ " Check if the character at lnum:col is inside a string, comment, or is ascii. function s:IsInStringOrComment(lnum, col) return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_strcom endfunction " Check if the character at lnum:col is inside a string. function s:IsInString(lnum, col) return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_string endfunction " Check if the character at lnum:col is inside a string delimiter function s:IsInStringDelimiter(lnum, col) return synIDattr(synID(a:lnum, a:col, 1), 'name') == 'falconStringDelimiter' endfunction " Find line above 'lnum' that isn't empty, in a comment, or in a string. function s:PrevNonBlankNonString(lnum) let in_block = 0 let lnum = prevnonblank(a:lnum) while lnum > 0 " Go in and out of blocks comments as necessary. " If the line isn't empty (with opt. comment) or in a string, end search. let line = getline(lnum) if line =~ '^=begin' if in_block let in_block = 0 else break endif elseif !in_block && line =~ '^=end' let in_block = 1 elseif !in_block && line !~ '^\s*#.*$' && !(s:IsInStringOrComment(lnum, 1) \ && s:IsInStringOrComment(lnum, strlen(line))) break endif let lnum = prevnonblank(lnum - 1) endwhile return lnum endfunction " Find line above 'lnum' that started the continuation 'lnum' may be part of. function s:GetMSL(lnum) " Start on the line we're at and use its indent. let msl = a:lnum let msl_body = getline(msl) let lnum = s:PrevNonBlankNonString(a:lnum - 1) while lnum > 0 " If we have a continuation line, or we're in a string, use line as MSL. " Otherwise, terminate search as we have found our MSL already. let line = getline(lnum) if s:Match(line, s:non_bracket_continuation_regex) && \ s:Match(msl, s:non_bracket_continuation_regex) " If the current line is a non-bracket continuation and so is the " previous one, keep its indent and continue looking for an MSL. " " Example: " method_call one, " two, " three " let msl = lnum elseif s:Match(lnum, s:non_bracket_continuation_regex) && \ (s:Match(msl, s:bracket_continuation_regex) || s:Match(msl, s:block_continuation_regex)) " If the current line is a bracket continuation or a block-starter, but " the previous is a non-bracket one, respect the previous' indentation, " and stop here. " " Example: " method_call one, " two { " three " return lnum elseif s:Match(lnum, s:bracket_continuation_regex) && \ (s:Match(msl, s:bracket_continuation_regex) || s:Match(msl, s:block_continuation_regex)) " If both lines are bracket continuations (the current may also be a " block-starter), use the current one's and stop here " " Example: " method_call( " other_method_call( " foo return msl elseif s:Match(lnum, s:block_regex) && \ !s:Match(msl, s:continuation_regex) && \ !s:Match(msl, s:block_continuation_regex) " If the previous line is a block-starter and the current one is " mostly ordinary, use the current one as the MSL. " " Example: " method_call do " something " something_else return msl else let col = match(line, s:continuation_regex) + 1 if (col > 0 && !s:IsInStringOrComment(lnum, col)) \ || s:IsInString(lnum, strlen(line)) let msl = lnum else break endif endif let msl_body = getline(msl) let lnum = s:PrevNonBlankNonString(lnum - 1) endwhile return msl endfunction " Check if line 'lnum' has more opening brackets than closing ones. function s:ExtraBrackets(lnum) let opening = {'parentheses': [], 'braces': [], 'brackets': []} let closing = {'parentheses': [], 'braces': [], 'brackets': []} let line = getline(a:lnum) let pos = match(line, '[][(){}]', 0) " Save any encountered opening brackets, and remove them once a matching " closing one has been found. If a closing bracket shows up that doesn't " close anything, save it for later. while pos != -1 if !s:IsInStringOrComment(a:lnum, pos + 1) if line[pos] == '(' call add(opening.parentheses, {'type': '(', 'pos': pos}) elseif line[pos] == ')' if empty(opening.parentheses) call add(closing.parentheses, {'type': ')', 'pos': pos}) else let opening.parentheses = opening.parentheses[0:-2] endif elseif line[pos] == '{' call add(opening.braces, {'type': '{', 'pos': pos}) elseif line[pos] == '}' if empty(opening.braces) call add(closing.braces, {'type': '}', 'pos': pos}) else let opening.braces = opening.braces[0:-2] endif elseif line[pos] == '[' call add(opening.brackets, {'type': '[', 'pos': pos}) elseif line[pos] == ']' if empty(opening.brackets) call add(closing.brackets, {'type': ']', 'pos': pos}) else let opening.brackets = opening.brackets[0:-2] endif endif endif let pos = match(line, '[][(){}]', pos + 1) endwhile " Find the rightmost brackets, since they're the ones that are important in " both opening and closing cases let rightmost_opening = {'type': '(', 'pos': -1} let rightmost_closing = {'type': ')', 'pos': -1} for opening in opening.parentheses + opening.braces + opening.brackets if opening.pos > rightmost_opening.pos let rightmost_opening = opening endif endfor for closing in closing.parentheses + closing.braces + closing.brackets if closing.pos > rightmost_closing.pos let rightmost_closing = closing endif endfor return [rightmost_opening, rightmost_closing] endfunction function s:Match(lnum, regex) let col = match(getline(a:lnum), '\C'.a:regex) + 1 return col > 0 && !s:IsInStringOrComment(a:lnum, col) ? col : 0 endfunction function s:MatchLast(lnum, regex) let line = getline(a:lnum) let col = match(line, '.*\zs' . a:regex) while col != -1 && s:IsInStringOrComment(a:lnum, col) let line = strpart(line, 0, col) let col = match(line, '.*' . a:regex) endwhile return col + 1 endfunction " 4. FalconGetIndent Routine {{{1 " ============ function FalconGetIndent(...) " For the current line, use the first argument if given, else v:lnum let clnum = a:0 ? a:1 : v:lnum " Use zero indent at the top of the file if clnum == 0 return 0 endif let line = getline(clnum) let ind = -1 " If we got a closing bracket on an empty line, find its match and indent " according to it. For parentheses we indent to its column - 1, for the " others we indent to the containing line's MSL's level. Return -1 if fail. let col = matchend(line, '^\s*[]})]') if col > 0 && !s:IsInStringOrComment(clnum, col) call cursor(clnum, col) let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2) if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0 if line[col-1]==')' && col('.') != col('$') - 1 let ind = virtcol('.') - 1 else let ind = indent(s:GetMSL(line('.'))) endif endif return ind endif " If we have a deindenting keyword, find its match and indent to its level. " TODO: this is messy if s:Match(clnum, s:falcon_deindent_keywords) call cursor(clnum, 1) if searchpair(s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'bW', \ s:end_skip_expr) > 0 let msl = s:GetMSL(line('.')) let line = getline(line('.')) if strpart(line, 0, col('.') - 1) =~ '=\s*$' && \ strpart(line, col('.') - 1, 2) !~ 'do' let ind = virtcol('.') - 1 elseif getline(msl) =~ '=\s*\(#.*\)\=$' let ind = indent(line('.')) else let ind = indent(msl) endif endif return ind endif " If we are in a multi-line string or line-comment, don't do anything to it. if s:IsInString(clnum, matchend(line, '^\s*') + 1) return indent('.') endif " Find a non-blank, non-multi-line string line above the current line. let lnum = s:PrevNonBlankNonString(clnum - 1) " If the line is empty and inside a string, use the previous line. if line =~ '^\s*$' && lnum != prevnonblank(clnum - 1) return indent(prevnonblank(clnum)) endif " At the start of the file use zero indent. if lnum == 0 return 0 endif " Set up variables for the previous line. let line = getline(lnum) let ind = indent(lnum) " If the previous line ended with a block opening, add a level of indent. if s:Match(lnum, s:block_regex) return indent(s:GetMSL(lnum)) + &sw endif " If it contained hanging closing brackets, find the rightmost one, find its " match and indent according to that. if line =~ '[[({]' || line =~ '[])}]\s*\%(#.*\)\=$' let [opening, closing] = s:ExtraBrackets(lnum) if opening.pos != -1 if opening.type == '(' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0 if col('.') + 1 == col('$') return ind + &sw else return virtcol('.') endif else let nonspace = matchend(line, '\S', opening.pos + 1) - 1 return nonspace > 0 ? nonspace : ind + &sw endif elseif closing.pos != -1 call cursor(lnum, closing.pos + 1) normal! % if s:Match(line('.'), s:falcon_indent_keywords) return indent('.') + &sw else return indent('.') endif else call cursor(clnum, vcol) end endif " If the previous line ended with an "end", match that "end"s beginning's " indent. let col = s:Match(lnum, '\%(^\|[^.:@$]\)\<end\>\s*\%(#.*\)\=$') if col > 0 call cursor(lnum, col) if searchpair(s:end_start_regex, '', s:end_end_regex, 'bW', \ s:end_skip_expr) > 0 let n = line('.') let ind = indent('.') let msl = s:GetMSL(n) if msl != n let ind = indent(msl) end return ind endif end let col = s:Match(lnum, s:falcon_indent_keywords) if col > 0 call cursor(lnum, col) let ind = virtcol('.') - 1 + &sw " TODO: make this better (we need to count them) (or, if a searchpair " fails, we know that something is lacking an end and thus we indent a " level if s:Match(lnum, s:end_end_regex) let ind = indent('.') endif return ind endif " Set up variables to use and search for MSL to the previous line. let p_lnum = lnum let lnum = s:GetMSL(lnum) " If the previous line wasn't a MSL and is continuation return its indent. " TODO: the || s:IsInString() thing worries me a bit. if p_lnum != lnum if s:Match(p_lnum, s:non_bracket_continuation_regex) || s:IsInString(p_lnum,strlen(line)) return ind endif endif " Set up more variables, now that we know we wasn't continuation bound. let line = getline(lnum) let msl_ind = indent(lnum) " If the MSL line had an indenting keyword in it, add a level of indent. " TODO: this does not take into account contrived things such as " module Foo; class Bar; end if s:Match(lnum, s:falcon_indent_keywords) let ind = msl_ind + &sw if s:Match(lnum, s:end_end_regex) let ind = ind - &sw endif return ind endif " If the previous line ended with [*+/.,-=], but wasn't a block ending or a " closing bracket, indent one extra level. if s:Match(lnum, s:non_bracket_continuation_regex) && !s:Match(lnum, '^\s*\([\])}]\|end\)') if lnum == p_lnum let ind = msl_ind + &sw else let ind = msl_ind endif return ind endif return ind endfunction " }}}1 let &cpo = s:cpo_save unlet s:cpo_save " vim: set sw=4 sts=4 et tw=80 :
Save
cmd:
run