diff options
author | Christian Clason <c.clason@uni-graz.at> | 2023-08-21 09:46:44 +0900 |
---|---|---|
committer | Christian Clason <c.clason@uni-graz.at> | 2023-08-21 10:13:44 +0900 |
commit | a5b6468e9bc19d3e01846c9a6a47a766b8b81a5a (patch) | |
tree | ee885230654891479e17d06859ee61af3d68ce20 /runtime/indent | |
parent | a2a226170d178086592967f23c39112811178f0c (diff) | |
download | rneovim-a5b6468e9bc19d3e01846c9a6a47a766b8b81a5a.tar.gz rneovim-a5b6468e9bc19d3e01846c9a6a47a766b8b81a5a.tar.bz2 rneovim-a5b6468e9bc19d3e01846c9a6a47a766b8b81a5a.zip |
vim-patch:9.0.1766: Runtime: Missing QML support
Problem: Runtime: Missing QML support
Solution: Add QML support to Vim
closes: vim/vim#12810
https://github.com/vim/vim/commit/bedc69f9d67b117ab05aa735c701cd3899d1ae2d
Co-authored-by: ChaseKnowlden <haroldknowlden@gmail.com>
Diffstat (limited to 'runtime/indent')
-rw-r--r-- | runtime/indent/qml.vim | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/runtime/indent/qml.vim b/runtime/indent/qml.vim new file mode 100644 index 0000000000..8c9fa91250 --- /dev/null +++ b/runtime/indent/qml.vim @@ -0,0 +1,59 @@ +" Vim indent file +" Language: QML +" Maintainer: Chase Knowlden <haroldknowlden@gmail.com> +" Last Change: 2023 Aug 16 +" +" Improved JavaScript indent script. + +" Indent script in place for this already? +if exists("b:did_indent") + finish +endif +let b:did_indent = 1 +let b:undo_indent = "setlocal indentexpr< indentkeys<" + +setlocal indentexpr=s:GetQmlIndent() +setlocal indentkeys=0{,0},0),0],:,!^F,o,O,e,*<Return>,=*/ + +" Only define functions once per session +if exists("*s:GetQmlIndent") + finish +endif + +" Clean up a line of code by removing trailing '//' and '/* */' comments, and trimming +" whitespace +function! s:Trim(line) + return substitute(substitute(substitute(a:line, '// .*', '', ''), '/\* .* \*/', '', ''), '^\s*\|\s*$', '', 'g') +endfunction + +function! s:GetQmlIndent() + let num = v:lnum + let line = s:Trim(getline(num)) + + let pnum = prevnonblank(num - 1) + if pnum == 0 + return 0 + endif + let pline = s:Trim(getline(pnum)) + + let ind = indent(pnum) + + " bracket/brace/paren blocks + if pline =~ '[{[(]$' + let ind += &sw + endif + if line =~ '^[}\])]' + let ind -= &sw + endif + + " '/*' comments + if pline =~ '^/\*.*\*/' + " no indent for single-line form + elseif pline =~ '^/\*' + let ind += 1 + elseif pline =~ '^\*/' + let ind -= 1 + endif + + return ind +endfunction |