summaryrefslogtreecommitdiffstats
path: root/autoload/scss_indent.vim
diff options
context:
space:
mode:
Diffstat (limited to 'autoload/scss_indent.vim')
-rw-r--r--autoload/scss_indent.vim37
1 files changed, 37 insertions, 0 deletions
diff --git a/autoload/scss_indent.vim b/autoload/scss_indent.vim
new file mode 100644
index 00000000..2e57ab2c
--- /dev/null
+++ b/autoload/scss_indent.vim
@@ -0,0 +1,37 @@
+" usage:
+" set indentexpr=scss_indent#GetIndent(v:lnum)
+fun! scss_indent#GetIndent(lnum)
+ " { -> increase indent
+ " } -> decrease indent
+ if a:lnum == 1
+ " start at 0 indentation
+ return 0
+ endif
+
+ " try to find last line ending with { or }
+ " ignoring // comments
+ let regex = '\([{}]\)\%(\/\/.*\)\?$'
+ let nr = search(regex, 'bnW')
+ if nr > 0
+ let last = indent(nr)
+ let m = matchlist(getline(nr), regex)
+ let m_curr = matchlist(getline(a:lnum), regex)
+ echoe string(m).string(m_curr)
+ if !empty(m_curr) && m_curr[1] == '}' && m[1] == '{'
+ " last was open, current is close, use same indent
+ return last
+ elseif !empty(m_curr) && m_curr[1] == '}' && m[1] == '}'
+ " } line and last line was }: decrease
+ return last - &sw
+ endif
+ if m[1] == '{'
+ " line after {: increase indent
+ return last + &sw
+ else
+ " line after } or { - same indent
+ return last
+ endif
+ else
+ return 0
+ endif
+endfun