Prevent jumping if open key equals close key, fixes #231

This commit is contained in:
Miao Jiang 2019-01-19 11:37:41 +08:00
parent 4af571e18b
commit c2f0eef628
2 changed files with 23 additions and 22 deletions

View File

@ -308,27 +308,16 @@ Multibyte Pairs
The text after // in close pair is modifiers The text after // in close pair is modifiers
n - do not map the first charactor of closed pair to close key n - do not map the first charactor of closed pair to close key
s - do not jump through multi line m - close key jumps through multi line
s - close key jumps only in the same line
pair: "'''":"'''" by default if open key equals close key the multi line is turn off
input:
'''
|
''' (press ')
output:
'''
'''|
pair: "'''":"'''//s" "<?": "?>" ? jumps only in the same line
input: "<?": "?>//m" force ? jumping through multi line
''' "<?php":"?>" ? will jump through multi line
| "<?php":"?>//s" force ? only jumping in the same line
''' (press ') "<?": "?>//n" do not jump totally
output:
'''
'|'
'''
for 'begin' 'end' pair, e is a charactor, if map e to jump will be annoy, so use modifier 'n' to skip key map for 'begin' 'end' pair, e is a charactor, if map e to jump will be annoy, so use modifier 'n' to skip key map

View File

@ -393,6 +393,9 @@ func! AutoPairsSpace()
let [before, after, ig] = s:getline() let [before, after, ig] = s:getline()
for [open, close, opt] in b:AutoPairsList for [open, close, opt] in b:AutoPairsList
if close == ''
continue
end
if before =~ '\V'.open.'\v$' && after =~ '^\V'.close if before =~ '\V'.open.'\v$' && after =~ '^\V'.close
return "\<SPACE>\<SPACE>".s:Left return "\<SPACE>\<SPACE>".s:Left
end end
@ -444,20 +447,29 @@ func! AutoPairsInit()
let b:AutoPairsList = [] let b:AutoPairsList = []
" buffer level map pairs keys " buffer level map pairs keys
" n - do not map the first charactor of closed pair to close key
" m - close key jumps through multi line
" s - close key jumps only in the same line
for [open, close] in items(b:AutoPairs) for [open, close] in items(b:AutoPairs)
let o = open[len(open)-1] let o = open[-1:-1]
let m = matchlist(close, '\v(.*)//(.*)$') let c = close[0]
let opt = {'mapclose': 1, 'multiline':1} let opt = {'mapclose': 1, 'multiline':1}
if o == c
let opt['multiline'] = 0
end
let m = matchlist(close, '\v(.*)//(.*)$')
if len(m) > 0 if len(m) > 0
if m[2] =~ 'n' if m[2] =~ 'n'
let opt['mapclose'] = 0 let opt['mapclose'] = 0
end end
if m[2] =~ 'm'
let opt['multiline'] = 1
end
if m[2] =~ 's' if m[2] =~ 's'
let opt['multiline'] = 0 let opt['multiline'] = 0
end end
let close = m[1] let close = m[1]
end end
let c = close[0]
call AutoPairsMap(o) call AutoPairsMap(o)
if o != c && c != '' && opt['mapclose'] if o != c && c != '' && opt['mapclose']
call AutoPairsMap(c) call AutoPairsMap(c)