aboutsummaryrefslogtreecommitdiff
path: root/vim/indent
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2018-07-07 16:14:53 +1200
committerTom Ryder <tom@sanctum.geek.nz>2018-07-07 16:14:53 +1200
commit6201df6009b3c70a2d064fc0caf9ac297017ba0b (patch)
treecbda7447fec372ced73dc15482358586f0e47e84 /vim/indent
parentMerge branch 'release/v1.23.0' (diff)
downloaddotfiles-6201df6009b3c70a2d064fc0caf9ac297017ba0b.tar.gz
dotfiles-6201df6009b3c70a2d064fc0caf9ac297017ba0b.zip
Simplify in/out indent for blocks
Diffstat (limited to 'vim/indent')
-rw-r--r--vim/indent/perl.vim38
1 files changed, 22 insertions, 16 deletions
diff --git a/vim/indent/perl.vim b/vim/indent/perl.vim
index cd01f30b..aac8f818 100644
--- a/vim/indent/perl.vim
+++ b/vim/indent/perl.vim
@@ -83,36 +83,42 @@ function! GetPerlIndent(lnum)
let l:pl = getline(l:pn)
let l:pi = indent(l:pn)
- " Get value of 'shiftwidth'
- let l:sw = &shiftwidth ? &shiftwidth : &tabstop
+ " Just follow comment indent
+ if l:pl =~# '^\s*#'
+ return l:pi
+ endif
" Get current line properties
let l:cl = getline(a:lnum)
+ " Get value of 'shiftwidth'
+ let l:sw = &shiftwidth ? &shiftwidth : &tabstop
+
" Base indent with any fractional indent removed
let l:pb = l:pi - l:pi % l:sw
- " Just follow comment indent
- if l:pl =~# '^\s*#'
- return l:pi
-
- " Move out with closing brace
- elseif l:cl =~# '^\s*[])}]'
- return l:pb >= l:sw ? l:pb - l:sw : 0
-
- " Move in after opening brace
- elseif l:pl =~# '[{([]\s*$'
- return l:pb + l:sw
+ " Handle open and closing brackets
+ let l:open = l:pl =~# '[{([]\s*$'
+ let l:shut = l:cl =~# '^\s*[])}]'
+ if l:open || l:shut
+ let l:in = l:pb
+ if l:open
+ let l:in = l:in + l:sw
+ endif
+ if l:shut
+ let l:in = l:in - l:sw
+ endif
+ return l:in > 0 ? l:in : 0
+ endif
" Never continue after a semicolon or a double-underscore
- elseif l:pl =~# '\;\s*$'
+ if l:pl =~# '\;\s*$'
\ || l:pl =~# '__DATA__'
\ || l:pl =~# '__END__'
return l:pb
" Line continuation hints
- elseif l:pl =~# '[^])},]\s*$'
- \ || l:cl =~# '^\s*\(and\|or\|xor\)'
+ elseif l:cl =~# '^\s*\(and\|or\|xor\)'
\ || l:cl =~# '^\s*\(&&\|||\|//\)'
\ || l:cl =~# '^\s*[?:=]'
return l:pb + l:sw / 2