diff options
author | Adam Stankiewicz <sheerun@sher.pl> | 2020-08-06 13:22:17 +0200 |
---|---|---|
committer | Adam Stankiewicz <sheerun@sher.pl> | 2020-08-06 13:22:17 +0200 |
commit | 1e533e5982a9c80f262b09fbe94e1ac4555ad915 (patch) | |
tree | ed573a3e399a95c2c3baeb6a1371d4753357cecc /autoload | |
parent | 56121b4e27cb48efb17be55a969b2f0d725266f8 (diff) | |
download | vim-polyglot-1e533e5982a9c80f262b09fbe94e1ac4555ad915.tar.gz vim-polyglot-1e533e5982a9c80f262b09fbe94e1ac4555ad915.zip |
Update
Diffstat (limited to 'autoload')
-rw-r--r-- | autoload/fish.vim | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/autoload/fish.vim b/autoload/fish.vim index 33b03e6b..6d8af013 100644 --- a/autoload/fish.vim +++ b/autoload/fish.vim @@ -1,25 +1,43 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fish') == -1 function! fish#Indent() - let l:shiftwidth = shiftwidth() let l:prevlnum = prevnonblank(v:lnum - 1) if l:prevlnum ==# 0 return 0 endif - let l:indent = 0 let l:prevline = getline(l:prevlnum) - if l:prevline =~# '\v^\s*switch>' - return indent(l:prevlnum) + l:shiftwidth - elseif l:prevline =~# '\v^\s*%(begin|if|else|while|for|function|case)>' - let l:indent = l:shiftwidth - endif let l:line = getline(v:lnum) + let l:shiftwidth = shiftwidth() + let l:previndent = indent(l:prevlnum) + let l:indent = l:previndent + if l:prevline =~# '\v^\s*%(begin|if|else|while|for|function|switch|case)>' + let l:indent += l:shiftwidth + endif if l:line =~# '\v^\s*end>' - return indent(l:prevlnum) - (l:indent ==# 0 ? l:shiftwidth : l:indent) - elseif l:line =~# '\v^\s*%(case|else)>' - return indent(l:prevlnum) - l:shiftwidth + let l:indent -= l:shiftwidth + " If we're inside a case, dedent twice because it ends the switch. + if l:prevline =~# '\v^\s*case>' + " Previous line starts the case. + let l:indent -= l:shiftwidth + else + " Scan back to a dedented line to find whether we're in a case. + let l:i = l:prevlnum + while l:i >= 1 && indent(l:i) >= l:previndent + let l:i = prevnonblank(l:i - 1) + endwhile + if indent(l:i) < l:previndent && getline(l:i) =~# '\v^\s*case>' + let l:indent -= l:shiftwidth + endif + endif + elseif l:line =~# '\v^\s*else>' + let l:indent -= l:shiftwidth + elseif l:prevline !~# '\v^\s*switch>' && l:line =~# '\v^\s*case>' + let l:indent -= l:shiftwidth + endif + if l:indent < 0 + return 0 endif - return indent(l:prevlnum) + l:indent + return l:indent endfunction function! fish#Format() |