diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-06 02:44:24 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-06 02:44:24 +0000 |
commit | 8baab3c8d7a6f22888bd581cd5c6098fd2e4b5a8 (patch) | |
tree | 3537e168b860f2742f6029d70501b5ed7d15d345 /runtime/indent/mma.vim | |
parent | Initial commit. (diff) | |
download | vim-8baab3c8d7a6f22888bd581cd5c6098fd2e4b5a8.tar.xz vim-8baab3c8d7a6f22888bd581cd5c6098fd2e4b5a8.zip |
Adding upstream version 2:8.1.0875.upstream/2%8.1.0875upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'runtime/indent/mma.vim')
-rw-r--r-- | runtime/indent/mma.vim | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/runtime/indent/mma.vim b/runtime/indent/mma.vim new file mode 100644 index 0000000..8298ad9 --- /dev/null +++ b/runtime/indent/mma.vim @@ -0,0 +1,75 @@ +" Vim indent file +" Language: Mathematica +" Author: steve layland <layland@wolfram.com> +" Last Change: Sat May 10 18:56:22 CDT 2005 +" Source: http://vim.sourceforge.net/scripts/script.php?script_id=1274 +" http://members.wolfram.com/layland/vim/indent/mma.vim +" +" NOTE: +" Empty .m files will automatically be presumed to be Matlab files +" unless you have the following in your .vimrc: +" +" let filetype_m="mma" +" +" Credits: +" o steve hacked this out of a random indent file in the Vim 6.1 +" distribution that he no longer remembers...sh.vim? Thanks! + +" Only load this indent file when no other was loaded. +if exists("b:did_indent") + finish +endif +let b:did_indent = 1 + +setlocal indentexpr=GetMmaIndent() +setlocal indentkeys+=0[,0],0(,0) +setlocal nosi "turn off smart indent so we don't over analyze } blocks + +if exists("*GetMmaIndent") + finish +endif + +function GetMmaIndent() + + " Hit the start of the file, use zero indent. + if v:lnum == 0 + return 0 + endif + + " Find a non-blank line above the current line. + let lnum = prevnonblank(v:lnum - 1) + + " use indenting as a base + let ind = indent(v:lnum) + let lnum = v:lnum + + " if previous line has an unmatched bracket, or ( indent. + " doesn't do multiple parens/blocks/etc... + + " also, indent only if this line if this line isn't starting a new + " block... TODO - fix this with indentkeys? + if getline(v:lnum-1) =~ '\\\@<!\%(\[[^\]]*\|([^)]*\|{[^}]*\)$' && getline(v:lnum) !~ '\s\+[\[({]' + let ind = ind+shiftwidth() + endif + + " if this line had unmatched closing block, + " indent to the matching opening block + if getline(v:lnum) =~ '[^[]*]\s*$' + " move to the closing bracket + call search(']','bW') + " and find it's partner's indent + let ind = indent(searchpair('\[','',']','bWn')) + " same for ( blocks + elseif getline(v:lnum) =~ '[^(]*)$' + call search(')','bW') + let ind = indent(searchpair('(','',')','bWn')) + + " and finally, close { blocks if si ain't already set + elseif getline(v:lnum) =~ '[^{]*}' + call search('}','bW') + let ind = indent(searchpair('{','','}','bWn')) + endif + + return ind +endfunction + |