Use {<enter> instead of {{ (Thanks to linopolus)
https://github.com/jiangmiao/auto-pairs/issues/1 Add Toggle key Add Options g:AutoPairsShortcutToggle g:AutoPairsMapBS g:AutoPairsMapCR g:AutoPairsCenterLine
This commit is contained in:
parent
8d48d95dd8
commit
e893ae3d48
49
README.md
49
README.md
@ -18,9 +18,9 @@ Features
|
||||
input: foo[<BS>
|
||||
output: foo
|
||||
|
||||
### Double input open brackets will insert new indented line.
|
||||
### Insert new indented line after Return
|
||||
|
||||
input: {{
|
||||
input: {|} (press <CR> at |)
|
||||
output: {
|
||||
|
|
||||
}
|
||||
@ -35,21 +35,62 @@ Features
|
||||
input: "\'
|
||||
output: "\'"
|
||||
|
||||
|
||||
Shortcuts
|
||||
---------
|
||||
|
||||
System Shortcuts:
|
||||
<CR> : Insert new indented line after return if cursor in blank brackets or quotes.
|
||||
<BS> : Delete brackets in pair
|
||||
<M-p> : Toggle Autopairs
|
||||
|
||||
Optional Shortcuts:
|
||||
could be turn off by let g:AutoPairsShortcuts = 0
|
||||
<M-n> jump to next closed bracket.
|
||||
<M-a> jump to end of line.
|
||||
<M-o> jump to newline with indented.
|
||||
|
||||
Options
|
||||
-------
|
||||
* g:AutoPairs
|
||||
|
||||
Default: {'(':')', '[':']', '{':'}',"'":"'",'"':'"'}
|
||||
Default: {'(':')', '[':']', '{':'}',"'":"'",'"':'"'}
|
||||
|
||||
* g:AutoPairsShortcutToggle
|
||||
|
||||
Default: '<M-p>'
|
||||
|
||||
The shortcut to toggle autopairs.
|
||||
|
||||
* g:AutoPairsShortcuts
|
||||
|
||||
Default: 1
|
||||
Default: 1
|
||||
|
||||
imap 3 shortcuts
|
||||
<M-n> jump to next closed bracket.
|
||||
<M-a> jump to end of line.
|
||||
<M-o> jump to newline with indented.
|
||||
|
||||
* g:AutoPairsMapBS
|
||||
|
||||
Default : 1
|
||||
|
||||
Map <BS> to delete brackets, quotes in pair
|
||||
execute 'inoremap <buffer> <silent> <BS> <C-R>=AutoPairsDelete()<CR>'
|
||||
|
||||
* g:AutoPairsMapCR
|
||||
|
||||
Default : 1
|
||||
|
||||
Map <CR> to insert a new indented line if cursor in (|), {|} [|], '|', "|"
|
||||
execute 'inoremap <buffer> <silent> <CR> <C-R>=AutoPairsReturn()<CR>'
|
||||
|
||||
* g:AutoPairsCenterLine
|
||||
|
||||
Default : 1
|
||||
|
||||
When g:AutoPairsMapCR is on, center current line after return if the line is at the bottom 1/3 of the window.
|
||||
|
||||
TroubleShooting
|
||||
---------------
|
||||
The script will remap keys ([{'"}]) <BS>,
|
||||
|
@ -1,7 +1,8 @@
|
||||
" Insert or delete brackets, parens, quotes in pairs.
|
||||
" Maintainer: JiangMiao <jiangfriend@gmail.com>
|
||||
" Last Change: 2011-05-22
|
||||
" Version: 1.0.1
|
||||
" Last Change: 2011-06-07
|
||||
" Version: 1.0.2
|
||||
" Homepage: http://www.vim.org/scripts/script.php?script_id=3599
|
||||
" Repository: https://github.com/jiangmiao/auto-pairs
|
||||
|
||||
if exists('g:AutoPairsLoaded') || &cp
|
||||
@ -21,15 +22,40 @@ if !exists('g:AutoPairs')
|
||||
let g:AutoPairs = {'(':')', '[':']', '{':'}',"'":"'",'"':'"'}
|
||||
end
|
||||
|
||||
if !exists('g:AutoPairsMapBS')
|
||||
let g:AutoPairsMapBS = 1
|
||||
end
|
||||
|
||||
if !exists('g:AutoPairsMapCR')
|
||||
let g:AutoPairsMapCR = 1
|
||||
end
|
||||
|
||||
if !exists('g:AutoPairsCenterLine')
|
||||
let g:AutoPairsCenterLine = 1
|
||||
end
|
||||
|
||||
if !exists('g:AutoPairsShortcutToggle')
|
||||
let g:AutoPairsShortcutToggle = '<M-p>'
|
||||
end
|
||||
|
||||
let g:AutoPairsClosedPairs = {}
|
||||
|
||||
|
||||
|
||||
function! AutoPairsInsert(key)
|
||||
if !b:autopairs_enabled
|
||||
return a:key
|
||||
end
|
||||
|
||||
let line = getline('.')
|
||||
let prev_char = line[col('.')-2]
|
||||
let current_char = line[col('.')-1]
|
||||
|
||||
let eol = 0
|
||||
if col('$') - col('.') <= 1
|
||||
let eol = 1
|
||||
end
|
||||
|
||||
" Ignore auto close if prev character is \
|
||||
if prev_char == '\'
|
||||
return a:key
|
||||
@ -52,12 +78,6 @@ function! AutoPairsInsert(key)
|
||||
return "\<Right>"
|
||||
end
|
||||
|
||||
|
||||
" Auto return only if open and close is same
|
||||
if prev_char == open && open != close
|
||||
return "\<CR>\<ESC>==O"
|
||||
end
|
||||
|
||||
return open.close."\<Left>"
|
||||
endfunction
|
||||
|
||||
@ -86,12 +106,24 @@ function! AutoPairsJump()
|
||||
call search('[{("\[\]'')}]','W')
|
||||
endfunction
|
||||
|
||||
" Fast wrap the word in brackets
|
||||
" Haven't finished yet
|
||||
function! AutoPairsExtend()
|
||||
let line = getline('.')
|
||||
let current_char = line[col('.')-1]
|
||||
let next_char = line[col('.')]
|
||||
|
||||
|
||||
if has_key(g:AutoPairsClosedPairs, current_char)
|
||||
return "\<ESC>lxh:call AutoPairsJump(line('.'))\<CR>pi"
|
||||
if has_key(g:AutoPairs, next_char)
|
||||
let open = next_char
|
||||
let close = g:AutoPairs[next_char]
|
||||
let quote_pattern = '(?:\\\|\"\|[^"])*'
|
||||
echoe 'search pair '.open.' '.close
|
||||
call searchpair(open, '', close, 'W')
|
||||
end
|
||||
execute "normal! a".current_char."\<LEFT>"
|
||||
return ''
|
||||
end
|
||||
|
||||
return ''
|
||||
@ -101,7 +133,33 @@ function! AutoPairsMap(key)
|
||||
execute 'inoremap <buffer> <silent> '.a:key.' <C-R>=AutoPairsInsert("\'.a:key.'")<CR>'
|
||||
endfunction
|
||||
|
||||
function! AutoPairsToggle()
|
||||
if b:autopairs_enabled
|
||||
let b:autopairs_enabled = 0
|
||||
echo 'AutoPairs Disabled.'
|
||||
else
|
||||
let b:autopairs_enabled = 1
|
||||
echo 'AutoPairs Enabled.'
|
||||
end
|
||||
return ''
|
||||
endfunction
|
||||
|
||||
function! AutoPairsReturn()
|
||||
let line = getline('.')
|
||||
let prev_char = line[col('.')-2]
|
||||
let cmd = ''
|
||||
let cur_char = line[col('.')-1]
|
||||
if has_key(g:AutoPairs, prev_char) && g:AutoPairs[prev_char] == cur_char
|
||||
if g:AutoPairsCenterLine && winline() * 1.5 >= winheight(0)
|
||||
let cmd = ";\<C-O>zz\<DEL>"
|
||||
end
|
||||
return "\<CR>\<C-O>O".cmd
|
||||
end
|
||||
return "\<CR>"
|
||||
endfunction
|
||||
|
||||
function! AutoPairsInit()
|
||||
let b:autopairs_enabled = 1
|
||||
for [open, close] in items(g:AutoPairs)
|
||||
call AutoPairsMap(open)
|
||||
if open != close
|
||||
@ -109,8 +167,17 @@ function! AutoPairsInit()
|
||||
end
|
||||
let g:AutoPairsClosedPairs[close] = 1
|
||||
endfor
|
||||
execute 'inoremap <buffer> <silent> <BS> <C-R>=AutoPairsDelete()<CR>'
|
||||
|
||||
if g:AutoPairsMapBS
|
||||
execute 'inoremap <buffer> <silent> <BS> <C-R>=AutoPairsDelete()<CR>'
|
||||
end
|
||||
|
||||
if g:AutoPairsMapCR
|
||||
execute 'inoremap <buffer> <silent> <CR> <C-R>=AutoPairsReturn()<CR>'
|
||||
end
|
||||
|
||||
execute 'inoremap <buffer> <silent> '.g:AutoPairsShortcutToggle.' <C-R>=AutoPairsToggle()<CR>'
|
||||
execute 'noremap <buffer> <silent> '.g:AutoPairsShortcutToggle.' :call AutoPairsToggle()<CR>'
|
||||
" If the keys map conflict with your own settings, delete or change them
|
||||
if g:AutoPairsShortcuts
|
||||
execute 'inoremap <buffer> <silent> <M-n> <ESC>:call AutoPairsJump()<CR>a'
|
||||
@ -120,4 +187,4 @@ function! AutoPairsInit()
|
||||
end
|
||||
endfunction
|
||||
|
||||
au BufRead,BufNewFile * :call AutoPairsInit()
|
||||
au BufRead,BufNewFile,BufCreate * :call AutoPairsInit()
|
||||
|
Loading…
Reference in New Issue
Block a user