Do not expand cr and space inside quotes by default. Close #153.

- Add delimitMate_expand_inside_quotes.
- Add tests.
This commit is contained in:
Israel Chauca Fuentes
2013-12-24 02:48:35 -05:00
parent 399e18d669
commit 5ef40e0234
5 changed files with 87 additions and 13 deletions

View File

@@ -192,6 +192,27 @@ function! delimitMate#WithinEmptyPair() "{{{
return delimitMate#IsEmptyPair( char1.char2 )
endfunction "}}}
function! delimitMate#WithinEmptyMatchpair() "{{{
" get char before the cursor.
let open = delimitMate#GetCharFromCursor(-1)
let idx = index(s:g('left_delims'), open)
if idx == -1
return 0
endif
let close = get(s:g('right_delims'), idx, '')
return close ==# delimitMate#GetCharFromCursor(0)
endfunction "}}}
function! delimitMate#WithinEmptyQuotes() "{{{
" get char before the cursor.
let quote = delimitMate#GetCharFromCursor(-1)
let idx = index(s:g('quotes_list'), quote)
if idx == -1
return 0
endif
return quote ==# delimitMate#GetCharFromCursor(0)
endfunction "}}}
function! delimitMate#CursorIdx() "{{{
let idx = len(split(getline('.')[: col('.') - 1], '\zs')) - 1
return idx
@@ -448,10 +469,15 @@ function! delimitMate#ExpandReturn() "{{{
if delimitMate#IsForbidden("")
return "\<CR>"
endif
if delimitMate#WithinEmptyPair()
let escaped = delimitMate#CursorIdx() >= 2
\ && delimitMate#GetCharFromCursor(-2) == '\'
if delimitMate#WithinEmptyMatchpair()
\ || (s:g('expand_cr') == 2
\ && index(s:g('right_delims'), delimitMate#GetCharFromCursor(0)) > -1)
\ || (s:g('expand_inside_quotes')
\ && delimitMate#WithinEmptyQuotes()
\ && !escaped)
" Expand:
" Not sure why I used the previous combos, but I'm sure somebody will
" tell me about it.
" XXX zv prevents breaking expansion with syntax folding enabled by
" InsertLeave.
return "\<Esc>a\<CR>\<Esc>zvO"
@@ -466,7 +492,10 @@ function! delimitMate#ExpandSpace() "{{{
endif
let escaped = delimitMate#CursorIdx() >= 2
\ && delimitMate#GetCharFromCursor(-2) == '\'
if delimitMate#WithinEmptyPair() && !escaped
if delimitMate#WithinEmptyMatchpair()
\ || (s:g('expand_inside_quotes')
\ && delimitMate#WithinEmptyQuotes()
\ && !escaped)
" Expand:
return "\<Space>\<Space>\<Left>"
else

View File

@@ -193,7 +193,7 @@ e.g.: >
------------------------------------------------------------------------------
*'delimitMate_expand_cr'*
*'b:delimitMate_expand_cr'*
Values: 1 or 0 ~
Values: 0, 1 or 2 ~
Default: 0 ~
This option turns on/off the expansion of <CR>. Read |delimitMateExpansion|
@@ -214,6 +214,18 @@ e.g.: >
let delimitMate_expand_space = 1
au FileType tcl let b:delimitMate_expand_space = 1
<
------------------------------------------------------------------------------
*'delimitMate_expand_inside_quotes'*
*'b:delimitMate_expand_inside_quotes'*
Values: 1 or 0 ~
Default: 0 ~
When this option is set to 1 the expansion of space and cr will also be
applied to quotes. Read |delimitMateExpansion| for details.
e.g.: >
let delimitMate_expand_inside_quotes = 1
au FileType mail let b:delimitMate_expand_inside_quotes = 1
<
------------------------------------------------------------------------------
*'delimitMate_jump_expansion'*
*'b:delimitMate_jump_expansion'*
@@ -369,20 +381,20 @@ you should use <C-]> (read |i_CTRL-]|) to expand them on the go.
------------------------------------------------------------------------------
3.2 EXPANSION OF SPACE AND CAR RETURN *delimitMateExpansion*
When the cursor is inside an empty pair of delimiters, <Space> and <CR> can be
When the cursor is inside an empty pair of any matchpair, <Space> and <CR> can be
expanded, see |'delimitMate_expand_space'| and
|'delimitMate_expand_cr'|:
Expand <Space> to: >
<Space><Space><Left> | You get
====================================
You start with | You get
==============================
(|) | ( | )
<
Expand <CR> to: >
<CR><CR><Up> | You get
============================
You start with | You get
==============================
(|) | (
| |
| )
@@ -393,6 +405,15 @@ closing paren/bracket/etc. on the next line, delimitMate will make the cursor
jump over any whitespace/<CR> and place it after the existing closing
delimiter instead of inserting a new one.
When |'delimitMate_expand_cr'| is set to 2, the following will also happen: >
You start with | You get
==============================
(foo|) | (foo
| |
| )
<
Since <Space> and <CR> are used everywhere, I have made the functions involved
in expansions global, so they can be used to make custom mappings. Read
|delimitMateFunctions| for more details.

View File

@@ -108,6 +108,9 @@ function! s:init() "{{{
endif
call s:option_init("expand_cr", 0)
" expand_in_quotes
call s:option_init('expand_inside_quotes', 0)
" jump_expansion
call s:option_init("jump_expansion", 0)
@@ -395,4 +398,4 @@ augroup END
let &cpo = save_cpo
" GetLatestVimScripts: 2754 1 :AutoInstall: delimitMate.vim
" vim:foldmethod=marker:foldcolumn=4
" vim:foldmethod=marker:foldcolumn=4:ts=2:sw=2

View File

@@ -23,6 +23,8 @@ let g:delimitMate_autoclose = 0
let g:delimitMate_expand_space = 1
let g:delimitMate_autoclose = 1
"'\<Space>x" "' x'"
let g:delimitMate_expand_inside_quotes = 1
"'\<Space>x" "' x '"
"'\<Space>\<BS>x" "'x'"
"abc\\''\<Space>x" "abc\\' x'"
let g:delimitMate_autoclose = 0

View File

@@ -65,3 +65,22 @@ abc {
x
}
--------------------------------------------------------------------------------
# expand_cr != 2
%d_
call setline(1, 'abc(def)')
exec "normal $i\<CR>x"
================================================================================
abc(def
x)
--------------------------------------------------------------------------------
# expand_cr == 2
%d_
let delimitMate_expand_cr = 2
DelimitMateReload
call setline(1, 'abc(def)')
exec "normal $i\<CR>x"
================================================================================
abc(def
x
)
--------------------------------------------------------------------------------