mirror of
https://github.com/Raimondi/delimitMate.git
synced 2026-08-12 19:06:57 +08:00
Add :DMDebug
This commit is contained in:
+74
-63
@@ -1,8 +1,9 @@
|
|||||||
" Script variables {{{1
|
" Script variables {{{1
|
||||||
let s:defaults = {}
|
let s:defaults = {}
|
||||||
|
let s:defaults.delimitMate_enabled = 1
|
||||||
let s:defaults.delimitMate_pairs = ['()', '[]', '{}']
|
let s:defaults.delimitMate_pairs = ['()', '[]', '{}']
|
||||||
let s:defaults.delimitMate_quotes = ['"', "'", '`']
|
let s:defaults.delimitMate_quotes = ['"', "'", '`']
|
||||||
let s:defaults.delimitMate_enabled = 1
|
let s:defaults.delimitMate_debug = 4
|
||||||
let s:defaults.delimitMate_autoclose = 1
|
let s:defaults.delimitMate_autoclose = 1
|
||||||
let s:defaults.delimitMate_expand_space = 0
|
let s:defaults.delimitMate_expand_space = 0
|
||||||
let s:defaults.delimitMate_expand_cr = 0
|
let s:defaults.delimitMate_expand_cr = 0
|
||||||
@@ -45,6 +46,17 @@ let s:info.char = ''
|
|||||||
let s:info.nesting = 0
|
let s:info.nesting = 0
|
||||||
let s:info.template = {}
|
let s:info.template = {}
|
||||||
|
|
||||||
|
function! s:debug(debug_level, ...) "{{{
|
||||||
|
if s:option('debug') >= a:debug_level
|
||||||
|
let trail = expand('<sfile>')
|
||||||
|
let trail = substitute(trail, '\.\.<SNR>\d\+_debug$', '', '')
|
||||||
|
let trail = substitute(trail, '^function\s\+\%(delimitMate\)\?', '', '')
|
||||||
|
let message = get(a:, 1, '')
|
||||||
|
echom printf('%s: %s', trail, message)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
command! -nargs=* -count=3 DMDebug call s:debug(<count>, <args>)
|
||||||
|
|
||||||
function! s:defaults.consolidate() "{{{1
|
function! s:defaults.consolidate() "{{{1
|
||||||
let g = filter(copy(g:), 'v:key =~# "^delimitMate_"')
|
let g = filter(copy(g:), 'v:key =~# "^delimitMate_"')
|
||||||
let b = filter(copy(b:), 'v:key =~# "^delimitMate_"')
|
let b = filter(copy(b:), 'v:key =~# "^delimitMate_"')
|
||||||
@@ -117,7 +129,7 @@ function! s:get_info(...) "{{{1
|
|||||||
let d.n_char = strcharpart(d.ahead, 0, 1)
|
let d.n_char = strcharpart(d.ahead, 0, 1)
|
||||||
let d.around = d.p_char . d.n_char
|
let d.around = d.p_char . d.n_char
|
||||||
call extend(d, s:info.template, 'keep')
|
call extend(d, s:info.template, 'keep')
|
||||||
echom string(d)
|
3DMDebug string(d)
|
||||||
return d
|
return d
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@@ -134,7 +146,7 @@ function! s:any_is_true(expressions, info, options) "{{{1
|
|||||||
let next_char = info.cur.n_char
|
let next_char = info.cur.n_char
|
||||||
let exprs = copy(a:expressions)
|
let exprs = copy(a:expressions)
|
||||||
call filter(exprs, 'eval(v:val)')
|
call filter(exprs, 'eval(v:val)')
|
||||||
echom 'any_is_true: ' . string(exprs)
|
3DMDebug string(exprs)
|
||||||
return !empty(exprs)
|
return !empty(exprs)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@@ -157,25 +169,24 @@ function! delimitMate#CursorMovedI(...) "{{{1
|
|||||||
let s:info.prev = s:info.cur
|
let s:info.prev = s:info.cur
|
||||||
let s:info.cur = call('s:get_info', a:000)
|
let s:info.cur = call('s:get_info', a:000)
|
||||||
let s:info.skip_icp = 0
|
let s:info.skip_icp = 0
|
||||||
echom 'INFO: ' . string(s:info)
|
3DMDebug 'INFO: ' . string(s:info)
|
||||||
echom 'CMI: ' . s:info.prev.line
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! delimitMate#InsertEnter(...) "{{{1
|
function! delimitMate#InsertEnter(...) "{{{1
|
||||||
let s:info.cur = call('s:get_info', a:000)
|
let s:info.cur = call('s:get_info', a:000)
|
||||||
let s:info.prev = {}
|
let s:info.prev = {}
|
||||||
let s:info.skip_icp = 0
|
let s:info.skip_icp = 0
|
||||||
echom 'IE: ' . s:info.cur.line
|
3DMDebug
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! delimitMate#TextChangedI(...) "{{{1
|
function! delimitMate#TextChangedI(...) "{{{1
|
||||||
echom 'TCI: ' . s:info.cur.line
|
3DMDebug s:info.cur.line
|
||||||
if pumvisible()
|
if pumvisible()
|
||||||
echom 20
|
3DMDebug "20"
|
||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
if !s:option('enabled')
|
if !s:option('enabled')
|
||||||
echom 21
|
3DMDebug "21"
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
if s:info.cur.lnum == s:info.prev.lnum + 1
|
if s:info.cur.lnum == s:info.prev.lnum + 1
|
||||||
@@ -183,106 +194,106 @@ function! delimitMate#TextChangedI(...) "{{{1
|
|||||||
\&& s:info.prev.ahead ==# s:info.cur.ahead
|
\&& s:info.prev.ahead ==# s:info.cur.ahead
|
||||||
\&& s:info.cur.behind =~ '^\s*$'
|
\&& s:info.cur.behind =~ '^\s*$'
|
||||||
" CR
|
" CR
|
||||||
echom 22
|
3DMDebug "22"
|
||||||
return feedkeys(s:keys4cr(s:info, s:defaults.consolidate()), 'tni')
|
return feedkeys(s:keys4cr(s:info, s:defaults.consolidate()), 'tni')
|
||||||
endif
|
endif
|
||||||
if s:info.cur.lnum == s:info.prev.lnum - 1
|
if s:info.cur.lnum == s:info.prev.lnum - 1
|
||||||
\&& s:info.prev.prev_line ==# s:info.cur.line
|
\&& s:info.prev.prev_line ==# s:info.cur.line
|
||||||
\&& s:info.prev.next_line ==# s:info.cur.next_line
|
\&& s:info.prev.next_line ==# s:info.cur.next_line
|
||||||
let pair = filter(s:option('pairs'), 's:info.cur.p_char . matchstr(s:info.cur.next_line, "^\\s*\\zs\\S") ==# v:val')
|
let pair = filter(s:option('pairs'), 's:info.cur.p_char . matchstr(s:info.cur.next_line, "^\\s*\\zs\\S") ==# v:val')
|
||||||
echom 23
|
3DMDebug "23"
|
||||||
if s:option('expand_cr') && !empty(pair)
|
if s:option('expand_cr') && !empty(pair)
|
||||||
echom "23.1"
|
3DMDebug "23.1"
|
||||||
let spaces = strchars(s:info.cur.next_line, '^\s*')
|
let spaces = strchars(s:info.cur.next_line, '^\s*')
|
||||||
return feedkeys(repeat("\<Del>", spaces), 'nti')
|
return feedkeys(repeat("\<Del>", spaces), 'nti')
|
||||||
endif
|
endif
|
||||||
let quote = filter(s:option('quotes'), 's:info.cur.p_char . matchstr(s:info.cur.next_line, "^\\s*\\zs\\S") ==# v:val.v:val')
|
let quote = filter(s:option('quotes'), 's:info.cur.p_char . matchstr(s:info.cur.next_line, "^\\s*\\zs\\S") ==# v:val.v:val')
|
||||||
if s:option('expand_cr') && s:option('expand_inside_quotes') && !empty(quote)
|
if s:option('expand_cr') && s:option('expand_inside_quotes') && !empty(quote)
|
||||||
echom "23.2"
|
3DMDebug "23.2"
|
||||||
return feedkeys("\<Del>")
|
return feedkeys("\<Del>")
|
||||||
endif
|
endif
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
if s:info.cur.lnum != s:info.prev.lnum
|
if s:info.cur.lnum != s:info.prev.lnum
|
||||||
echom 24
|
3DMDebug "24"
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
if s:info.prev.col - s:info.cur.col != len(s:info.prev.p_char)
|
if s:info.prev.col - s:info.cur.col != len(s:info.prev.p_char)
|
||||||
echom 25
|
3DMDebug "25"
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
if len(s:info.prev.line) == len(s:info.cur.line)
|
if len(s:info.prev.line) == len(s:info.cur.line)
|
||||||
echom 26
|
3DMDebug "26"
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
echom s:info.prev.around
|
3DMDebug s:info.prev.around
|
||||||
let pair = filter(s:option('pairs'), 'v:val ==# (s:info.cur.p_char . matchstr(s:info.cur.ahead, "^\\s\\zs\\S"))')
|
let pair = filter(s:option('pairs'), 'v:val ==# (s:info.cur.p_char . matchstr(s:info.cur.ahead, "^\\s\\zs\\S"))')
|
||||||
let quotes = filter(s:option('quotes'), 'v:val . v:val ==# (s:info.cur.p_char . matchstr(s:info.cur.ahead, "^\\s\\zs\\S"))')
|
let quotes = filter(s:option('quotes'), 'v:val . v:val ==# (s:info.cur.p_char . matchstr(s:info.cur.ahead, "^\\s\\zs\\S"))')
|
||||||
if s:option('expand_space') && (!empty(pair) || (s:option('expand_inside_quotes') && !empty(quotes)))
|
if s:option('expand_space') && (!empty(pair) || (s:option('expand_inside_quotes') && !empty(quotes)))
|
||||||
echom 27
|
3DMDebug "27"
|
||||||
return feedkeys("\<Del>", 'tni')
|
return feedkeys("\<Del>", 'tni')
|
||||||
endif
|
endif
|
||||||
let pair = filter(s:option('pairs'), 'v:val ==# s:info.prev.around')
|
let pair = filter(s:option('pairs'), 'v:val ==# s:info.prev.around')
|
||||||
let quote = filter(s:option('quotes'), 'v:val . v:val ==# s:info.prev.around')
|
let quote = filter(s:option('quotes'), 'v:val . v:val ==# s:info.prev.around')
|
||||||
if empty(pair) && empty(quote)
|
if empty(pair) && empty(quote)
|
||||||
echom 28
|
3DMDebug "28"
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
echom 29
|
3DMDebug "29"
|
||||||
let keys = "\<Del>"
|
let keys = "\<Del>"
|
||||||
call feedkeys(keys, 'tni')
|
call feedkeys(keys, 'tni')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" vim: sw=2 et
|
" vim: sw=2 et
|
||||||
function! delimitMate#InsertCharPre(str) "{{{1
|
function! delimitMate#InsertCharPre(str) "{{{1
|
||||||
echom 'ICP ' . string(a:str) . ': ' . get(s:info, 'cur', {'line': ''}).line
|
3DMDebug string(a:str) . ': ' . get(s:info, 'cur', {'line': ''}).line
|
||||||
if s:info.skip_icp
|
if s:info.skip_icp
|
||||||
" iabbrev fires this event for every char and the trigger
|
" iabbrev fires this event for every char and the trigger
|
||||||
echom 01
|
3DMDebug "01"
|
||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
if pumvisible()
|
if pumvisible()
|
||||||
echom 2
|
3DMDebug "2"
|
||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
if s:info.nesting
|
if s:info.nesting
|
||||||
echom 03
|
3DMDebug "03"
|
||||||
let s:info.nesting -= 1
|
let s:info.nesting -= 1
|
||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
let s:info.skip_icp = 1
|
let s:info.skip_icp = 1
|
||||||
if !s:option('enabled')
|
if !s:option('enabled')
|
||||||
echom 04
|
3DMDebug "04"
|
||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
let synstack = join(map(synstack(line('.'), col('.')), 'tolower(synIDattr(v:val, "name"))'), ',')
|
let synstack = join(map(synstack(line('.'), col('.')), 'tolower(synIDattr(v:val, "name"))'), ',')
|
||||||
let s:info.is_ignored_syn = !empty(filter(s:option('excluded_regions'), 'stridx(synstack, tolower(v:val)) >= 0'))
|
let s:info.is_ignored_syn = !empty(filter(s:option('excluded_regions'), 'stridx(synstack, tolower(v:val)) >= 0'))
|
||||||
echom 9
|
3DMDebug "9"
|
||||||
for char in split(a:str, '\zs')
|
for char in split(a:str, '\zs')
|
||||||
let keys = ''
|
let keys = ''
|
||||||
let s:info.char = char
|
let s:info.char = char
|
||||||
let opts = s:defaults.consolidate()
|
let opts = s:defaults.consolidate()
|
||||||
if s:info.cur.is_escaped()
|
if s:info.cur.is_escaped()
|
||||||
echom 12
|
3DMDebug "12"
|
||||||
return
|
return
|
||||||
elseif !empty(filter(copy(opts.quotes), 'v:val ==# char'))
|
elseif !empty(filter(copy(opts.quotes), 'v:val ==# char'))
|
||||||
echom 15
|
3DMDebug "15"
|
||||||
let keys = s:keys4quote(char, s:info, opts)
|
let keys = s:keys4quote(char, s:info, opts)
|
||||||
let s:info.nesting = strchars(matchstr(keys, '^[^[:cntrl:]]*'))
|
let s:info.nesting = strchars(matchstr(keys, '^[^[:cntrl:]]*'))
|
||||||
let s:info.nesting = s:info.nesting < 3 ? 0 : s:info.nesting
|
let s:info.nesting = s:info.nesting < 3 ? 0 : s:info.nesting
|
||||||
elseif s:info.is_ignored_syn
|
elseif s:info.is_ignored_syn
|
||||||
echom 9
|
3DMDebug "9"
|
||||||
return
|
return
|
||||||
elseif char == ' '
|
elseif char == ' '
|
||||||
echom 13
|
3DMDebug "13"
|
||||||
let keys = s:keys4space(s:info, opts)
|
let keys = s:keys4space(s:info, opts)
|
||||||
elseif char == "\<C-]>"
|
elseif char == "\<C-]>"
|
||||||
let prev_line = line('.') == 1 ? '' : getline(line('.') - 1)
|
let prev_line = line('.') == 1 ? '' : getline(line('.') - 1)
|
||||||
let next_line = line('.') == line('$') ? '' : getline(line('.') + 1)
|
let next_line = line('.') == line('$') ? '' : getline(line('.') + 1)
|
||||||
echom 14
|
3DMDebug "14"
|
||||||
let keys = s:keys4cr(prev_line, next_line, s:info, opts)
|
let keys = s:keys4cr(prev_line, next_line, s:info, opts)
|
||||||
elseif !empty(filter(copy(opts.pairs), 'strcharpart(v:val, 0, 1) ==# char'))
|
elseif !empty(filter(copy(opts.pairs), 'strcharpart(v:val, 0, 1) ==# char'))
|
||||||
echom 16
|
3DMDebug "16"
|
||||||
let pair = get(filter(copy(opts.pairs), 'strcharpart(v:val, 0, 1) ==# char'), 0, '')
|
let pair = get(filter(copy(opts.pairs), 'strcharpart(v:val, 0, 1) ==# char'), 0, '')
|
||||||
let keys = s:keys4left(char, pair, s:info, opts)
|
let keys = s:keys4left(char, pair, s:info, opts)
|
||||||
"echom strtrans(keys)
|
"echom strtrans(keys)
|
||||||
@@ -290,99 +301,99 @@ function! delimitMate#InsertCharPre(str) "{{{1
|
|||||||
elseif !empty(filter(copy(opts.pairs), 'strcharpart(v:val, 1, 1) ==# char'))
|
elseif !empty(filter(copy(opts.pairs), 'strcharpart(v:val, 1, 1) ==# char'))
|
||||||
let pair = get(filter(copy(opts.pairs), 'strcharpart(v:val, 1, 1) ==# char'), 0, '')
|
let pair = get(filter(copy(opts.pairs), 'strcharpart(v:val, 1, 1) ==# char'), 0, '')
|
||||||
let keys = s:keys4right(char, pair, s:info, opts)
|
let keys = s:keys4right(char, pair, s:info, opts)
|
||||||
echom 17
|
3DMDebug "17"
|
||||||
echom keys
|
|
||||||
else
|
else
|
||||||
echom 18
|
3DMDebug "18"
|
||||||
return 0
|
return 0
|
||||||
endif
|
endif
|
||||||
|
3DMDebug keys
|
||||||
call feedkeys(keys, 'mti')
|
call feedkeys(keys, 'mti')
|
||||||
endfor
|
endfor
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:keys4space(info, opts) "{{{1
|
function! s:keys4space(info, opts) "{{{1
|
||||||
echom string(a:opts)
|
3DMDebug string(a:opts)
|
||||||
let empty_pair = !empty(filter(copy(a:opts.pairs), 'v:val ==# a:info.cur.around'))
|
let empty_pair = !empty(filter(copy(a:opts.pairs), 'v:val ==# a:info.cur.around'))
|
||||||
if a:opts.expand_space && empty_pair
|
if a:opts.expand_space && empty_pair
|
||||||
echom 61
|
3DMDebug "61"
|
||||||
return " \<C-G>U\<Left>"
|
return " \<C-G>U\<Left>"
|
||||||
endif
|
endif
|
||||||
let empty_quotes = !empty(filter(copy(a:opts.quotes), 'v:val.v:val ==# a:info.cur.around'))
|
let empty_quotes = !empty(filter(copy(a:opts.quotes), 'v:val.v:val ==# a:info.cur.around'))
|
||||||
if a:opts.expand_space && a:opts.expand_inside_quotes && empty_quotes
|
if a:opts.expand_space && a:opts.expand_inside_quotes && empty_quotes
|
||||||
echom 62
|
3DMDebug "62"
|
||||||
return " \<C-G>U\<Left>"
|
return " \<C-G>U\<Left>"
|
||||||
endif
|
endif
|
||||||
echom 69
|
3DMDebug "69"
|
||||||
return ''
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:keys4left(char, pair, info, opts) "{{{1
|
function! s:keys4left(char, pair, info, opts) "{{{1
|
||||||
if !a:opts.autoclose
|
if !a:opts.autoclose
|
||||||
echom 31
|
3DMDebug "31"
|
||||||
return ''
|
return ''
|
||||||
endif
|
endif
|
||||||
let exprs = a:opts.smart_pairs_base + a:opts.smart_pairs_extra
|
let exprs = a:opts.smart_pairs_base + a:opts.smart_pairs_extra
|
||||||
if a:opts.smart_pairs && s:any_is_true(exprs, a:info, a:opts)
|
if a:opts.smart_pairs && s:any_is_true(exprs, a:info, a:opts)
|
||||||
echom 32
|
3DMDebug "32"
|
||||||
return ''
|
return ''
|
||||||
endif
|
endif
|
||||||
if a:opts.balance_pairs && s:balance_pairs(a:pair, a:info, a:opts) < 0
|
if a:opts.balance_pairs && s:balance_pairs(a:pair, a:info, a:opts) < 0
|
||||||
echom 33
|
3DMDebug "33"
|
||||||
return ''
|
return ''
|
||||||
endif
|
endif
|
||||||
let eol_marker = a:opts.insert_eol_marker == 1 && empty(a:info.cur.ahead) ? a:opts.eol_marker . "\<C-G>U\<Left>" : ''
|
let eol_marker = a:opts.insert_eol_marker == 1 && empty(a:info.cur.ahead) ? a:opts.eol_marker . "\<C-G>U\<Left>" : ''
|
||||||
echom 34
|
3DMDebug "34"
|
||||||
return strcharpart(a:pair, 1, 1) . eol_marker . "\<C-G>U\<Left>"
|
return strcharpart(a:pair, 1, 1) . eol_marker . "\<C-G>U\<Left>"
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:keys4right(char, pair, info, opts) "{{{1
|
function! s:keys4right(char, pair, info, opts) "{{{1
|
||||||
if a:opts.jump_expansion
|
if a:opts.jump_expansion
|
||||||
echom 40
|
3DMDebug "40"
|
||||||
let around = matchstr(a:info.cur.prev_line, "\\S$") . matchstr(a:info.cur.next_line, "^\\s*\zs\\S")
|
let around = matchstr(a:info.cur.prev_line, "\\S$") . matchstr(a:info.cur.next_line, "^\\s*\zs\\S")
|
||||||
if empty(a:info.cur.ahead) && a:char ==# matchstr(a:info.cur.next_line, "^\\s*\\zs\\S")
|
if empty(a:info.cur.ahead) && a:char ==# matchstr(a:info.cur.next_line, "^\\s*\\zs\\S")
|
||||||
let rights = strchars(matchstr(a:info.cur.next_line, '^\s*')) + 2
|
let rights = strchars(matchstr(a:info.cur.next_line, '^\s*')) + 2
|
||||||
echom "40.1"
|
3DMDebug "40.1"
|
||||||
return "\<Esc>s" . repeat("\<Right>", rights)
|
return "\<Esc>s" . repeat("\<Right>", rights)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
if !a:opts.autoclose
|
if !a:opts.autoclose
|
||||||
if s:info.cur.around == a:pair
|
if s:info.cur.around == a:pair
|
||||||
echom 41
|
3DMDebug "41"
|
||||||
return "\<Del>"
|
return "\<Del>"
|
||||||
elseif s:info.cur.p_char == strcharpart(a:pair, 0, 1)
|
elseif s:info.cur.p_char == strcharpart(a:pair, 0, 1)
|
||||||
echom 42
|
3DMDebug "42"
|
||||||
return "\<C-G>U\<Left>"
|
return "\<C-G>U\<Left>"
|
||||||
endif
|
endif
|
||||||
echom 43
|
3DMDebug "43"
|
||||||
return ""
|
return ""
|
||||||
endif
|
endif
|
||||||
if strcharpart(a:info.cur.line[a:info.cur.col - 1 :], 0, 1) ==# a:char
|
if strcharpart(a:info.cur.line[a:info.cur.col - 1 :], 0, 1) ==# a:char
|
||||||
echom 44
|
3DMDebug "44"
|
||||||
return "\<Del>"
|
return "\<Del>"
|
||||||
endif
|
endif
|
||||||
if a:opts.expand_space && a:opts.jump_expansion
|
if a:opts.expand_space && a:opts.jump_expansion
|
||||||
\ && matchstr(a:info.cur.ahead, '^ ['.escape(a:char, '\^[]').']') ==# ' ' . a:char
|
\ && matchstr(a:info.cur.ahead, '^ ['.escape(a:char, '\^[]').']') ==# ' ' . a:char
|
||||||
echom 45
|
3DMDebug "45"
|
||||||
return "\<Del>\<Del>\<C-G>U\<Left> \<C-G>U\<Right>"
|
return "\<Del>\<Del>\<C-G>U\<Left> \<C-G>U\<Right>"
|
||||||
endif
|
endif
|
||||||
echom 49
|
3DMDebug "49"
|
||||||
return ''
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:keys4quote(char, info, opts) "{{{1
|
function! s:keys4quote(char, info, opts) "{{{1
|
||||||
let quotes_behind = strchars(matchstr(a:info.cur.behind, '['.escape(a:char, '\^[]').']*$'))
|
let quotes_behind = strchars(matchstr(a:info.cur.behind, '['.escape(a:char, '\^[]').']*$'))
|
||||||
let quotes_ahead = strchars(matchstr(a:info.cur.ahead, '^['.escape(a:char, '\^[]').']*'))
|
let quotes_ahead = strchars(matchstr(a:info.cur.ahead, '^['.escape(a:char, '\^[]').']*'))
|
||||||
echom 'k4q: ' quotes_behind . ' - ' . quotes_ahead
|
3DMDebug quotes_behind . ' - ' . quotes_ahead
|
||||||
echom string(a:opts.nesting_quotes)
|
3DMDebug string(a:opts.nesting_quotes)
|
||||||
if a:opts.autoclose && index(a:opts.nesting_quotes, a:char) >= 0
|
if a:opts.autoclose && index(a:opts.nesting_quotes, a:char) >= 0
|
||||||
\&& quotes_behind > 1
|
\&& quotes_behind > 1
|
||||||
let add2right = quotes_ahead > quotes_behind + 1 ? 0 : quotes_behind - quotes_ahead + 1
|
let add2right = quotes_ahead > quotes_behind + 1 ? 0 : quotes_behind - quotes_ahead + 1
|
||||||
echom 51
|
3DMDebug "51"
|
||||||
echom add2right
|
3DMDebug add2right
|
||||||
return repeat(a:char, add2right) . repeat("\<C-G>U\<Left>", add2right)
|
return repeat(a:char, add2right) . repeat("\<C-G>U\<Left>", add2right)
|
||||||
endif
|
endif
|
||||||
if a:info.cur.n_char ==# a:char
|
if a:info.cur.n_char ==# a:char
|
||||||
echom 53
|
3DMDebug "53"
|
||||||
return "\<Del>"
|
return "\<Del>"
|
||||||
endif
|
endif
|
||||||
if a:info.is_ignored_syn
|
if a:info.is_ignored_syn
|
||||||
@@ -391,18 +402,18 @@ function! s:keys4quote(char, info, opts) "{{{1
|
|||||||
let exprs = a:opts.smart_quotes_base + a:opts.smart_quotes_extra
|
let exprs = a:opts.smart_quotes_base + a:opts.smart_quotes_extra
|
||||||
if a:opts.autoclose && a:opts.smart_quotes
|
if a:opts.autoclose && a:opts.smart_quotes
|
||||||
\&& s:any_is_true(exprs, a:info, a:opts)
|
\&& s:any_is_true(exprs, a:info, a:opts)
|
||||||
echom 52
|
3DMDebug "52"
|
||||||
return ''
|
return ''
|
||||||
endif
|
endif
|
||||||
if !a:opts.autoclose && quotes_behind
|
if !a:opts.autoclose && quotes_behind
|
||||||
echom 54
|
3DMDebug "54"
|
||||||
return "\<Left>"
|
return "\<Left>"
|
||||||
endif
|
endif
|
||||||
if !a:opts.autoclose
|
if !a:opts.autoclose
|
||||||
echom 55
|
3DMDebug "55"
|
||||||
return ''
|
return ''
|
||||||
endif
|
endif
|
||||||
echom 59
|
3DMDebug "59"
|
||||||
return a:char . "\<C-G>U\<Left>"
|
return a:char . "\<C-G>U\<Left>"
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@@ -411,17 +422,17 @@ function! s:keys4cr(info, opts) "{{{1
|
|||||||
\&& !empty(filter(copy(a:opts.pairs), 'v:val ==# a:info.prev.around'))
|
\&& !empty(filter(copy(a:opts.pairs), 'v:val ==# a:info.prev.around'))
|
||||||
\|| (a:opts.expand_cr == 2 && !empty(filter(copy(a:opts.pairs), 'strcharpart(v:val, 1, 1) == a:info.cur.n_char')))
|
\|| (a:opts.expand_cr == 2 && !empty(filter(copy(a:opts.pairs), 'strcharpart(v:val, 1, 1) == a:info.cur.n_char')))
|
||||||
" Empty pair
|
" Empty pair
|
||||||
echom 71
|
3DMDebug "71"
|
||||||
let eol_marker = a:opts.insert_eol_marker == 2 && strchars(a:info.cur.ahead) == 1 ? a:opts.eol_marker : ''
|
let eol_marker = a:opts.insert_eol_marker == 2 && strchars(a:info.cur.ahead) == 1 ? a:opts.eol_marker : ''
|
||||||
return "0\<C-D>\<Del>x\<C-G>U\<Left>\<BS>\<CR>" . a:info.cur.n_char . "\<Del>" . eol_marker . "\<Up>\<End>\<CR>"
|
return "0\<C-D>\<Del>x\<C-G>U\<Left>\<BS>\<CR>" . a:info.cur.n_char . "\<Del>" . eol_marker . "\<Up>\<End>\<CR>"
|
||||||
endif
|
endif
|
||||||
if a:opts.expand_cr && a:opts.expand_inside_quotes
|
if a:opts.expand_cr && a:opts.expand_inside_quotes
|
||||||
\&& !empty(filter(copy(a:opts.quotes), 'v:val.v:val ==# a:info.prev.around'))
|
\&& !empty(filter(copy(a:opts.quotes), 'v:val.v:val ==# a:info.prev.around'))
|
||||||
" Empty pair
|
" Empty pair
|
||||||
echom 72
|
3DMDebug "72"
|
||||||
return "\<Up>\<End>\<CR>"
|
return "\<Up>\<End>\<CR>"
|
||||||
endif
|
endif
|
||||||
echom 79
|
3DMDebug "79"
|
||||||
return ''
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
" vim: sw=2 et
|
" vim: sw=2 et
|
||||||
|
|||||||
Reference in New Issue
Block a user