diff options
author | Adam Stankiewicz <sheerun@sher.pl> | 2014-12-09 23:09:20 +0100 |
---|---|---|
committer | Adam Stankiewicz <sheerun@sher.pl> | 2014-12-09 23:09:20 +0100 |
commit | 4071c094c69ba8ef716f8048cac8415fc7d96e26 (patch) | |
tree | ccf17bae58ed7655d62a7bce6104f31480976dc6 /indent/javascript.vim | |
parent | 617b01a5b6aa3cadb25b2ff8639e330cfc6cf3c1 (diff) | |
download | vim-polyglot-1.10.4.tar.gz vim-polyglot-1.10.4.zip |
Updatev1.10.4
Diffstat (limited to 'indent/javascript.vim')
-rw-r--r-- | indent/javascript.vim | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/indent/javascript.vim b/indent/javascript.vim index 29fba2ba..5cde88d1 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -15,6 +15,7 @@ setlocal nosmartindent " Now, set up our indentation expression and keys that trigger it. setlocal indentexpr=GetJavascriptIndent() +setlocal formatexpr=Fixedgq(v:lnum,v:count) setlocal indentkeys=0{,0},0),0],0\,,!^F,o,O,e " Only define the function once. @@ -437,3 +438,58 @@ endfunction let &cpo = s:cpo_save unlet s:cpo_save + +function! Fixedgq(lnum, count) + let l:tw = &tw ? &tw : 80; + + let l:count = a:count + + if mode() == 'i' " gq was not pressed, but tw was set + return 1 + endif + + if len(getline(a:lnum)) < l:tw && l:count == 1 " No need for gq + return 1 + endif + + " Put all the lines on one line and do normal spliting after that + if l:count > 1 + while l:count > 1 + let l:count -= 1 + normal J + endwhile + endif + + let l:winview = winsaveview() + + call cursor(a:lnum, l:tw + 1) + let orig_breakpoint = searchpairpos(' ', '', '\.', 'bcW', '', a:lnum) + call cursor(a:lnum, l:tw + 1) + let breakpoint = searchpairpos(' ', '', '\.', 'bcW', s:skip_expr, a:lnum) + + " No need for special treatment, normal gq handles edgecases better + if breakpoint[1] == orig_breakpoint[1] + call winrestview(l:winview) + return 1 + endif + + " Try breaking after string + if breakpoint[1] <= indent(a:lnum) + call cursor(a:lnum, l:tw + 1) + let breakpoint = searchpairpos('\.', '', ' ', 'cW', s:skip_expr, a:lnum) + endif + + + if breakpoint[1] != 0 + call feedkeys("r\<CR>") + else + let l:count = l:count - 1 + endif + + " run gq on new lines + if l:count == 1 + call feedkeys("gqq") + endif + + return 0 +endfunction |