/usr/share/vim/vim91/indent
NameSizeModeActions
aap.vim3310644editdlrm
ada.vim113240644editdlrm
ant.vim2900644editdlrm
automake.vim2430644editdlrm
awk.vim78630644editdlrm
bash.vim3900644editdlrm
basic.vim2500644editdlrm
bib.vim3460644editdlrm
bitbake.vim5830644editdlrm
bst.vim19070644editdlrm
bzl.vim29250644editdlrm
c.vim3910644editdlrm
cdl.vim43660644editdlrm
ch.vim5560644editdlrm
chaiscript.vim12040644editdlrm
changelog.vim2640644editdlrm
chatito.vim7310644editdlrm
clojure.vim115570644editdlrm
cmake.vim30490644editdlrm
cobol.vim88320644editdlrm
config.vim22220644editdlrm
context.vim17140644editdlrm
cpp.vim3950644editdlrm
cs.vim19280644editdlrm
css.vim18130644editdlrm
cucumber.vim28090644editdlrm
cuda.vim3710644editdlrm
d.vim6050644editdlrm
dictconf.vim4110644editdlrm
dictdconf.vim4140644editdlrm
docbk.vim3360644editdlrm
dosbatch.vim13820644editdlrm
dtd.vim120720644editdlrm
dtrace.vim4510644editdlrm
dts.vim17350644editdlrm
dune.vim4300644editdlrm
dylan.vim28110644editdlrm
eiffel.vim33170644editdlrm
elm.vim32770644editdlrm
erlang.vim519550644editdlrm
eruby.vim30160644editdlrm
eterm.vim7430644editdlrm
expect.vim2070644editdlrm
falcon.vim141710644editdlrm
fennel.vim2730644editdlrm
fish.vim27190644editdlrm
fortran.vim79060644editdlrm
framescript.vim8910644editdlrm
freebasic.vim2370644editdlrm
gdscript.vim43590644editdlrm
gitconfig.vim8410644editdlrm
gitolite.vim13210644editdlrm
go.vim17670644editdlrm
gyp.vim1690644editdlrm
haml.vim22470644editdlrm
hamster.vim16920644editdlrm
hare.vim44900644editdlrm
hog.vim18920644editdlrm
html.vim339140644editdlrm
htmldjango.vim2730644editdlrm
idlang.vim17230644editdlrm
ishd.vim18770644editdlrm
j.vim18120644editdlrm
java.vim42870644editdlrm
javascript.vim154930644editdlrm
javascriptreact.vim1090644editdlrm
json.vim46440644editdlrm
jsonc.vim48570644editdlrm
jsp.vim4620644editdlrm
julia.vim156600644editdlrm
kotlin.vim15660644editdlrm
krl.vim43560644editdlrm
ld.vim18670644editdlrm
less.vim2430644editdlrm
lifelines.vim6380644editdlrm
liquid.vim20770644editdlrm
lisp.vim3490644editdlrm
livebook.vim2060644editdlrm
logtalk.vim19590644editdlrm
lua.vim22690644editdlrm
luau.vim2520644editdlrm
mail.vim3850644editdlrm
make.vim35650644editdlrm
matlab.vim49230644editdlrm
meson.vim53190644editdlrm
mf.vim1640644editdlrm
mma.vim23670644editdlrm
mp.vim99540644editdlrm
nginx.vim17370644editdlrm
nsis.vim33060644editdlrm
objc.vim16880644editdlrm
obse.vim14370644editdlrm
ocaml.vim93050644editdlrm
occam.vim47380644editdlrm
pascal.vim57930644editdlrm
perl.vim60510644editdlrm
php.vim263830644editdlrm
postscr.vim16790644editdlrm
pov.vim27700644editdlrm
prolog.vim19540644editdlrm
ps1.vim4100644editdlrm
pyrex.vim3260644editdlrm
python.vim8860644editdlrm
qb64.vim2320644editdlrm
qml.vim13030644editdlrm
quarto.vim230644editdlrm
r.vim142990644editdlrm
racket.vim29400644editdlrm
raku.vim35300644editdlrm
raml.vim2850644editdlrm
rapid.vim81660644editdlrm
readline.vim7860644editdlrm
rhelp.vim28990644editdlrm
rmd.vim23060644editdlrm
rnoweb.vim11260644editdlrm
rpl.vim18630644editdlrm
rrst.vim12220644editdlrm
rst.vim19490644editdlrm
ruby.vim310590644editdlrm
rust.vim105020644editdlrm
sas.vim53090644editdlrm
sass.vim9260644editdlrm
scala.vim197650644editdlrm
scheme.vim3720644editdlrm
scss.vim1910644editdlrm
sdl.vim28290644editdlrm
sh.vim92570644editdlrm
sml.vim65730644editdlrm
solidity.vim129130644editdlrm
sql.vim12040644editdlrm
sqlanywhere.vim132690644editdlrm
sshconfig.vim7960644editdlrm
systemverilog.vim108040644editdlrm
tcl.vim25420644editdlrm
tcsh.vim13810644editdlrm
teraterm.vim14130644editdlrm
tex.vim138480644editdlrm
tf.vim16040644editdlrm
tilde.vim11360644editdlrm
treetop.vim7850644editdlrm
typescript.vim146180644editdlrm
typescriptreact.vim1090644editdlrm
vb.vim48010644editdlrm
verilog.vim82690644editdlrm
vhdl.vim147780644editdlrm
vim.vim6750644editdlrm
vroom.vim3790644editdlrm
vue.vim3850644editdlrm
wat.vim4580644editdlrm
xf86conf.vim7860644editdlrm
xhtml.vim3250644editdlrm
xinetd.vim13080644editdlrm
xml.vim77840644editdlrm
xsd.vim2530644editdlrm
xslt.vim2970644editdlrm
yacc.vim8580644editdlrm
yaml.vim55770644editdlrm
zig.vim21370644editdlrm
zimbu.vim40130644editdlrm
zsh.vim4110644editdlrm
Edit: /usr/share/vim/vim91/indent/rust.vim (10502B)
" Vim indent file " Language: Rust " Author: Chris Morgan " Last Change: 2023-09-11 " For bugs, patches and license go to https://github.com/rust-lang/rust.vim " Only load this indent file when no other was loaded. if exists("b:did_indent") finish endif let b:did_indent = 1 setlocal cindent setlocal cinoptions=L0,(s,Ws,J1,j1,m1 setlocal cinkeys=0{,0},!^F,o,O,0[,0],0(,0) " Don't think cinwords will actually do anything at all... never mind setlocal cinwords=for,if,else,while,loop,impl,mod,unsafe,trait,struct,enum,fn,extern,macro " Some preliminary settings setlocal nolisp " Make sure lisp indenting doesn't supersede us setlocal autoindent " indentexpr isn't much help otherwise " Also do indentkeys, otherwise # gets shoved to column 0 :-/ setlocal indentkeys=0{,0},!^F,o,O,0[,0],0(,0) setlocal indentexpr=GetRustIndent(v:lnum) let b:undo_indent = "setlocal cindent< cinoptions< cinkeys< cinwords< lisp< autoindent< indentkeys< indentexpr<" " Only define the function once. if exists("*GetRustIndent") finish endif " vint: -ProhibitAbbreviationOption let s:save_cpo = &cpo set cpo&vim " vint: +ProhibitAbbreviationOption " Come here when loading the script the first time. function! s:get_line_trimmed(lnum) " Get the line and remove a trailing comment. " Use syntax highlighting attributes when possible. " NOTE: this is not accurate; /* */ or a line continuation could trick it let line = getline(a:lnum) let line_len = strlen(line) if has('syntax_items') " If the last character in the line is a comment, do a binary search for " the start of the comment. synID() is slow, a linear search would take " too long on a long line. if synIDattr(synID(a:lnum, line_len, 1), "name") =~? 'Comment\|Todo' let min = 1 let max = line_len while min < max let col = (min + max) / 2 if synIDattr(synID(a:lnum, col, 1), "name") =~? 'Comment\|Todo' let max = col else let min = col + 1 endif endwhile let line = strpart(line, 0, min - 1) endif return substitute(line, "\s*$", "", "") else " Sorry, this is not complete, nor fully correct (e.g. string "//"). " Such is life. return substitute(line, "\s*//.*$", "", "") endif endfunction function! s:is_string_comment(lnum, col) if has('syntax_items') for id in synstack(a:lnum, a:col) let synname = synIDattr(id, "name") if synname ==# "rustString" || synname =~# "^rustComment" return 1 endif endfor else " without syntax, let's not even try return 0 endif endfunction if exists('*shiftwidth') function! s:shiftwidth() return shiftwidth() endfunc else function! s:shiftwidth() return &shiftwidth endfunc endif function GetRustIndent(lnum) " Starting assumption: cindent (called at the end) will do it right " normally. We just want to fix up a few cases. let line = getline(a:lnum) if has('syntax_items') let synname = synIDattr(synID(a:lnum, 1, 1), "name") if synname ==# "rustString" " If the start of the line is in a string, don't change the indent return -1 elseif synname =~? '\(Comment\|Todo\)' \ && line !~# '^\s*/\*' " not /* opening line if synname =~? "CommentML" " multi-line if line !~# '^\s*\*' && getline(a:lnum - 1) =~# '^\s*/\*' " This is (hopefully) the line after a /*, and it has no " leader, so the correct indentation is that of the " previous line. return GetRustIndent(a:lnum - 1) endif endif " If it's in a comment, let cindent take care of it now. This is " for cases like "/*" where the next line should start " * ", not " "* " as the code below would otherwise cause for module scope " Fun fact: " /*\n*\n*/" takes two calls to get right! return cindent(a:lnum) endif endif " cindent gets second and subsequent match patterns/struct members wrong, " as it treats the comma as indicating an unfinished statement:: " " match a { " b => c, " d => e, " f => g, " }; " Search backwards for the previous non-empty line. let prevlinenum = prevnonblank(a:lnum - 1) let prevline = s:get_line_trimmed(prevlinenum) while prevlinenum > 1 && prevline !~# '[^[:blank:]]' let prevlinenum = prevnonblank(prevlinenum - 1) let prevline = s:get_line_trimmed(prevlinenum) endwhile " A standalone '{', '}', or 'where' let l:standalone_open = line =~# '\V\^\s\*{\s\*\$' let l:standalone_close = line =~# '\V\^\s\*}\s\*\$' let l:standalone_where = line =~# '\V\^\s\*where\s\*\$' if l:standalone_open || l:standalone_close || l:standalone_where " ToDo: we can search for more items than 'fn' and 'if'. let [l:found_line, l:col, l:submatch] = \ searchpos('\<\(fn\)\|\(if\)\>', 'bnWp') if l:found_line !=# 0 " Now we count the number of '{' and '}' in between the match " locations and the current line (there is probably a better " way to compute this). let l:i = l:found_line let l:search_line = strpart(getline(l:i), l:col - 1) let l:opens = 0 let l:closes = 0 while l:i < a:lnum let l:search_line2 = substitute(l:search_line, '\V{', '', 'g') let l:opens += strlen(l:search_line) - strlen(l:search_line2) let l:search_line3 = substitute(l:search_line2, '\V}', '', 'g') let l:closes += strlen(l:search_line2) - strlen(l:search_line3) let l:i += 1 let l:search_line = getline(l:i) endwhile if l:standalone_open || l:standalone_where if l:opens ==# l:closes return indent(l:found_line) endif else " Expect to find just one more close than an open if l:opens ==# l:closes + 1 return indent(l:found_line) endif endif endif endif " A standalone 'where' adds a shift. let l:standalone_prevline_where = prevline =~# '\V\^\s\*where\s\*\$' if l:standalone_prevline_where return indent(prevlinenum) + 4 endif " Handle where clauses nicely: subsequent values should line up nicely. if prevline[len(prevline) - 1] ==# "," \ && prevline =~# '^\s*where\s' return indent(prevlinenum) + 6 endif let l:last_prevline_character = prevline[len(prevline) - 1] " A line that ends with '.;' is probably an end of a long list " of method operations. if prevline =~# '\V\^\s\*.' && l:last_prevline_character ==# ';' call cursor(a:lnum - 1, 1) let l:scope_start = searchpair('{\|(', '', '}\|)', 'nbW', \ 's:is_string_comment(line("."), col("."))') if l:scope_start != 0 && l:scope_start < a:lnum return indent(l:scope_start) + 4 endif endif if l:last_prevline_character ==# "," \ && s:get_line_trimmed(a:lnum) !~# '^\s*[\[\]{})]' \ && prevline !~# '^\s*fn\s' \ && prevline !~# '([^()]\+,$' \ && s:get_line_trimmed(a:lnum) !~# '^\s*\S\+\s*=>' " Oh ho! The previous line ended in a comma! I bet cindent will try to " take this too far... For now, let's normally use the previous line's " indent. " One case where this doesn't work out is where *this* line contains " square or curly brackets; then we normally *do* want to be indenting " further. " " Another case where we don't want to is one like a function " definition with arguments spread over multiple lines: " " fn foo(baz: Baz, " baz: Baz) // <-- cindent gets this right by itself " " Another case is similar to the previous, except calling a function " instead of defining it, or any conditional expression that leaves " an open paren: " " foo(baz, " baz); " " if baz && (foo || " bar) { " " Another case is when the current line is a new match arm. " " There are probably other cases where we don't want to do this as " well. Add them as needed. return indent(prevlinenum) endif if !has("patch-7.4.355") " cindent before 7.4.355 doesn't do the module scope well at all; e.g.:: " " static FOO : &'static [bool] = [ " true, " false, " false, " true, " ]; " " uh oh, next statement is indented further! " Note that this does *not* apply the line continuation pattern properly; " that's too hard to do correctly for my liking at present, so I'll just " start with these two main cases (square brackets and not returning to " column zero) call cursor(a:lnum, 1) if searchpair('{\|(', '', '}\|)', 'nbW', \ 's:is_string_comment(line("."), col("."))') == 0 if searchpair('\[', '', '\]', 'nbW', \ 's:is_string_comment(line("."), col("."))') == 0 " Global scope, should be zero return 0 else " At the module scope, inside square brackets only "if getline(a:lnum)[0] == ']' || search('\[', '', '\]', 'nW') == a:lnum if line =~# "^\\s*]" " It's the closing line, dedent it return 0 else return &shiftwidth endif endif endif endif " Fall back on cindent, which does it mostly right return cindent(a:lnum) endfunction " vint: -ProhibitAbbreviationOption let &cpo = s:save_cpo unlet s:save_cpo " vint: +ProhibitAbbreviationOption " vim: set et sw=4 sts=4 ts=8: