Improve AutoPairsMapSpace Feature
MapSpace now only works with [], {}, () Delete last two space with one backspace, [ | ], press <BS> at |, output: [|] Smarter paren insertion [ foo| ], press ] at |, ouput: [ foo ]|
This commit is contained in:
parent
75b6bfb804
commit
6a4b2ca820
18
README.md
18
README.md
@ -25,11 +25,17 @@ Features
|
|||||||
|
|
|
|
||||||
}
|
}
|
||||||
|
|
||||||
* Insert spaces before closing characters
|
* Insert spaces before closing characters, only for [], (), {}
|
||||||
|
|
||||||
input: {|} (press <SPACE> at |)
|
input: {|} (press <SPACE> at |)
|
||||||
output: { | }
|
output: { | }
|
||||||
|
|
||||||
|
input: {|} (press <SPACE>foo} at |)
|
||||||
|
output: { foo }|
|
||||||
|
|
||||||
|
input: '|' (press <SPACE> at |)
|
||||||
|
output: ' |'
|
||||||
|
|
||||||
* Skip closed bracket.
|
* Skip closed bracket.
|
||||||
|
|
||||||
input: []
|
input: []
|
||||||
@ -115,7 +121,7 @@ Options
|
|||||||
Default : 1
|
Default : 1
|
||||||
|
|
||||||
Map <space> to insert a space after the opening character and before the closing one.
|
Map <space> to insert a space after the opening character and before the closing one.
|
||||||
execute 'inoremap <buffer> <silent> <CR> <C-R>=AutoPairsReturn()<CR>'
|
execute 'inoremap <buffer> <silent> <CR> <C-R>=AutoPairsSpace()<CR>'
|
||||||
|
|
||||||
TroubleShooting
|
TroubleShooting
|
||||||
---------------
|
---------------
|
||||||
@ -125,3 +131,11 @@ TroubleShooting
|
|||||||
Or the plugin conflict with some other plugins.
|
Or the plugin conflict with some other plugins.
|
||||||
use command :call AutoPairsInit() to remap the keys.
|
use command :call AutoPairsInit() to remap the keys.
|
||||||
|
|
||||||
|
|
||||||
|
* How to insert parens purely
|
||||||
|
|
||||||
|
There are 3 ways
|
||||||
|
1 use Ctrl-V ) to insert paren without trigger the plugin.
|
||||||
|
2 use Alt-P to turn off the plugin.
|
||||||
|
3 use DEL or <C-O>x to delete the character insert by plugin.
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
" Insert or delete brackets, parens, quotes in pairs.
|
" Insert or delete brackets, parens, quotes in pairs.
|
||||||
" Maintainer: JiangMiao <jiangfriend@gmail.com>
|
" Maintainer: JiangMiao <jiangfriend@gmail.com>
|
||||||
" Last Change: 2011-12-07
|
" Last Change: 2011-12-13
|
||||||
" Version: 1.1.2
|
" Version: 1.1.3
|
||||||
" Homepage: http://www.vim.org/scripts/script.php?script_id=3599
|
" Homepage: http://www.vim.org/scripts/script.php?script_id=3599
|
||||||
" Repository: https://github.com/jiangmiao/auto-pairs
|
" Repository: https://github.com/jiangmiao/auto-pairs
|
||||||
|
|
||||||
@ -21,6 +21,11 @@ end
|
|||||||
if !exists('g:AutoPairs')
|
if !exists('g:AutoPairs')
|
||||||
let g:AutoPairs = {'(':')', '[':']', '{':'}',"'":"'",'"':'"'}
|
let g:AutoPairs = {'(':')', '[':']', '{':'}',"'":"'",'"':'"'}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if !exists('g:AutoPairsParens')
|
||||||
|
let g:AutoPairsParens = {'(':')', '[':']', '{':'}'}
|
||||||
|
end
|
||||||
|
|
||||||
let g:AutoExtraPairs = copy(g:AutoPairs)
|
let g:AutoExtraPairs = copy(g:AutoPairs)
|
||||||
let g:AutoExtraPairs['<'] = '>'
|
let g:AutoExtraPairs['<'] = '>'
|
||||||
|
|
||||||
@ -60,6 +65,7 @@ function! AutoPairsInsert(key)
|
|||||||
let line = getline('.')
|
let line = getline('.')
|
||||||
let prev_char = line[col('.')-2]
|
let prev_char = line[col('.')-2]
|
||||||
let current_char = line[col('.')-1]
|
let current_char = line[col('.')-1]
|
||||||
|
let next_char = line[col('.')]
|
||||||
|
|
||||||
let eol = 0
|
let eol = 0
|
||||||
if col('$') - col('.') <= 1
|
if col('$') - col('.') <= 1
|
||||||
@ -71,13 +77,19 @@ function! AutoPairsInsert(key)
|
|||||||
return a:key
|
return a:key
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
if !has_key(g:AutoPairs, a:key)
|
||||||
|
" Skip the character if next character is space
|
||||||
|
if current_char == ' ' && next_char == a:key
|
||||||
|
return "\<Right>\<Right>"
|
||||||
|
end
|
||||||
|
|
||||||
" Skip the character if current character is the same as input
|
" Skip the character if current character is the same as input
|
||||||
if current_char == a:key && !has_key(g:AutoPairs, a:key)
|
if current_char == a:key
|
||||||
return "\<Right>"
|
return "\<Right>"
|
||||||
end
|
end
|
||||||
|
|
||||||
" Input directly if the key is not an open key
|
" Input directly if the key is not an open key
|
||||||
if !has_key(g:AutoPairs, a:key)
|
|
||||||
return a:key
|
return a:key
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -93,6 +105,7 @@ endfunction
|
|||||||
|
|
||||||
function! AutoPairsDelete()
|
function! AutoPairsDelete()
|
||||||
let line = getline('.')
|
let line = getline('.')
|
||||||
|
let current_char = line[col('.')-1]
|
||||||
let prev_char = line[col('.')-2]
|
let prev_char = line[col('.')-2]
|
||||||
let pprev_char = line[col('.')-3]
|
let pprev_char = line[col('.')-3]
|
||||||
|
|
||||||
@ -100,6 +113,11 @@ function! AutoPairsDelete()
|
|||||||
return "\<BS>"
|
return "\<BS>"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
" Delete last two spaces in parens, work with MapSpace
|
||||||
|
if has_key(g:AutoPairs, pprev_char) && prev_char == ' ' && current_char == ' '
|
||||||
|
return "\<BS>\<DEL>"
|
||||||
|
endif
|
||||||
|
|
||||||
if has_key(g:AutoPairs, prev_char)
|
if has_key(g:AutoPairs, prev_char)
|
||||||
let close = g:AutoPairs[prev_char]
|
let close = g:AutoPairs[prev_char]
|
||||||
if match(line,'^\s*'.close, col('.')-1) != -1
|
if match(line,'^\s*'.close, col('.')-1) != -1
|
||||||
@ -169,7 +187,7 @@ function! AutoPairsReturn()
|
|||||||
if g:AutoPairsCenterLine && winline() * 1.5 >= winheight(0)
|
if g:AutoPairsCenterLine && winline() * 1.5 >= winheight(0)
|
||||||
let cmd = " \<C-O>zz\<ESC>cl"
|
let cmd = " \<C-O>zz\<ESC>cl"
|
||||||
end
|
end
|
||||||
" conflict from javascript and coffee
|
" conflict with javascript and coffee
|
||||||
" javascript need indent new line
|
" javascript need indent new line
|
||||||
" coffeescript forbid indent new line
|
" coffeescript forbid indent new line
|
||||||
if &filetype == 'coffeescript'
|
if &filetype == 'coffeescript'
|
||||||
@ -186,8 +204,8 @@ function! AutoPairsSpace()
|
|||||||
let prev_char = line[col('.')-2]
|
let prev_char = line[col('.')-2]
|
||||||
let cmd = ''
|
let cmd = ''
|
||||||
let cur_char =line[col('.')-1]
|
let cur_char =line[col('.')-1]
|
||||||
if has_key(g:AutoPairs, prev_char) && g:AutoPairs[prev_char] == cur_char
|
if has_key(g:AutoPairsParens, prev_char) && g:AutoPairsParens[prev_char] == cur_char
|
||||||
let cmd = "\<SPACE>\<ESC>i"
|
let cmd = "\<SPACE>\<LEFT>"
|
||||||
endif
|
endif
|
||||||
return "\<SPACE>".cmd
|
return "\<SPACE>".cmd
|
||||||
endfunction
|
endfunction
|
||||||
|
Loading…
Reference in New Issue
Block a user