mirror of
https://github.com/Raimondi/delimitMate.git
synced 2025-12-06 12:44:27 +08:00
Added Visual() and simplified VisualMaps().
This commit is contained in:
@@ -56,6 +56,49 @@ function! delimitMate#IsBlockVisual() " {{{
|
|||||||
return 0
|
return 0
|
||||||
endfunction " }}}
|
endfunction " }}}
|
||||||
|
|
||||||
|
function! delimitMate#Visual(del) " {{{
|
||||||
|
let mode = mode()
|
||||||
|
if mode == "\<C-V>"
|
||||||
|
redraw
|
||||||
|
echom "delimitMate: delimitMate is disabled on blockwise visual mode."
|
||||||
|
return ""
|
||||||
|
endif
|
||||||
|
" Store unnamed register values for later use in delimitMate#RestoreRegister().
|
||||||
|
let b:save_reg = getreg('"')
|
||||||
|
let b:save_reg_mode = getregtype('"')
|
||||||
|
|
||||||
|
if len(getline('.')) == 0
|
||||||
|
" This for proper wrap of empty lines.
|
||||||
|
let @" = "\n"
|
||||||
|
endif
|
||||||
|
|
||||||
|
if mode ==# "V"
|
||||||
|
let dchar = "\<BS>"
|
||||||
|
else
|
||||||
|
let dchar = ""
|
||||||
|
endif
|
||||||
|
|
||||||
|
let index = index(b:delimitMate_left_delims, a:del)
|
||||||
|
if index >= 0
|
||||||
|
let ld = a:del
|
||||||
|
let rd = b:delimitMate_right_delims[index]
|
||||||
|
endif
|
||||||
|
|
||||||
|
let index = index(b:delimitMate_right_delims, a:del)
|
||||||
|
if index >= 0
|
||||||
|
let ld = b:delimitMate_left_delims[index]
|
||||||
|
let rd = a:del
|
||||||
|
endif
|
||||||
|
|
||||||
|
let index = index(b:delimitMate_quotes_list, a:del)
|
||||||
|
if index >= 0
|
||||||
|
let ld = a:del
|
||||||
|
let rd = ld
|
||||||
|
endif
|
||||||
|
|
||||||
|
return "s" . ld . "\<C-R>\"" . dchar . rd . "\<Esc>:call delimitMate#RestoreRegister()\<CR>"
|
||||||
|
endfunction " }}}
|
||||||
|
|
||||||
function! delimitMate#IsEmptyPair(str) "{{{
|
function! delimitMate#IsEmptyPair(str) "{{{
|
||||||
for pair in b:delimitMate_matchpairs_list
|
for pair in b:delimitMate_matchpairs_list
|
||||||
if a:str == join( split( pair, ':' ),'' )
|
if a:str == join( split( pair, ':' ),'' )
|
||||||
@@ -158,14 +201,17 @@ function! delimitMate#GetCurrentSyntaxRegionIf(char) "{{{
|
|||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! delimitMate#IsForbidden(char) "{{{
|
function! delimitMate#IsForbidden(char) "{{{
|
||||||
|
if b:delimitMate_excluded_regions_enabled = 0
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
let result = index(b:delimitMate_excluded_regions_list, delimitMate#GetCurrentSyntaxRegion()) >= 0
|
let result = index(b:delimitMate_excluded_regions_list, delimitMate#GetCurrentSyntaxRegion()) >= 0
|
||||||
if result
|
if result >= 0
|
||||||
return result
|
return result + 1
|
||||||
endif
|
endif
|
||||||
let region = delimitMate#GetCurrentSyntaxRegionIf(a:char)
|
let region = delimitMate#GetCurrentSyntaxRegionIf(a:char)
|
||||||
let result = index(b:delimitMate_excluded_regions_list, region) >= 0
|
let result = index(b:delimitMate_excluded_regions_list, region) >= 0
|
||||||
"return result || region == 'Comment'
|
"return result || region == 'Comment'
|
||||||
return result
|
return result + 1
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
function! delimitMate#FlushBuffer() " {{{
|
function! delimitMate#FlushBuffer() " {{{
|
||||||
@@ -367,7 +413,6 @@ function! delimitMate#AutoClose() "{{{
|
|||||||
let ld = b:delimitMate_left_delims[i]
|
let ld = b:delimitMate_left_delims[i]
|
||||||
let rd = b:delimitMate_right_delims[i]
|
let rd = b:delimitMate_right_delims[i]
|
||||||
exec 'inoremap <buffer> ' . ld . ' ' . ld . '<C-R>=delimitMate#JumpIn("' . rd . '")<CR>'
|
exec 'inoremap <buffer> ' . ld . ' ' . ld . '<C-R>=delimitMate#JumpIn("' . rd . '")<CR>'
|
||||||
"exec 'inoremap <buffer> ' . ld . ' <C-R>=delimitMate#JumpIn("' . ld . '")<CR>'
|
|
||||||
let i += 1
|
let i += 1
|
||||||
endwhile
|
endwhile
|
||||||
|
|
||||||
@@ -393,22 +438,8 @@ function! delimitMate#VisualMaps() " {{{
|
|||||||
let VMapMsg = "delimitMate: delimitMate is disabled on blockwise visual mode."
|
let VMapMsg = "delimitMate: delimitMate is disabled on blockwise visual mode."
|
||||||
let vleader = b:delimitMate_visual_leader
|
let vleader = b:delimitMate_visual_leader
|
||||||
" Wrap the selection with matching pairs, but do nothing if blockwise visual mode is active:
|
" Wrap the selection with matching pairs, but do nothing if blockwise visual mode is active:
|
||||||
let i = 0
|
for del in b:delimitMate_right_delims + b:delimitMate_left_delims + b:delimitMate_quotes_list
|
||||||
while i < len(b:delimitMate_matchpairs_list)
|
exec "vnoremap <buffer> <expr> " . vleader . del . ' delimitMate#Visual("' . escape(del, '"') . '")'
|
||||||
" Map left delimiter:
|
|
||||||
let ld = b:delimitMate_left_delims[i]
|
|
||||||
let rd = b:delimitMate_right_delims[i]
|
|
||||||
exec 'vnoremap <buffer> <expr> ' . vleader . ld . ' delimitMate#IsBlockVisual() ? delimitMate#MapMsg("' . VMapMsg . '") : mode() ==# "V" ? "s' . ld . '\<C-R>\"\<BS>' . rd . '\<Esc>:call delimitMate#RestoreRegister()\<CR>" : "s' . ld . '\<C-R>\"' . rd . '\<Esc>:call delimitMate#RestoreRegister()\<CR>"'
|
|
||||||
|
|
||||||
" Map right delimiter:
|
|
||||||
exec 'vnoremap <buffer> <expr> ' . vleader . rd . ' delimitMate#IsBlockVisual() ? delimitMate#MapMsg("' . VMapMsg . '") : mode() ==# "V" ? "s' . ld . '\<C-R>\"\<BS>' . rd . '\<Esc>:call delimitMate#RestoreRegister()<CR>" : "s' . ld . '\<C-R>\"' . rd . '\<Esc>:call delimitMate#RestoreRegister()<CR>"'
|
|
||||||
let i += 1
|
|
||||||
endwhile
|
|
||||||
|
|
||||||
" Wrap the selection with matching quotes, but do nothing if blockwise visual mode is active:
|
|
||||||
for quote in b:delimitMate_quotes_list
|
|
||||||
" vnoremap <buffer> <expr> \' delimitMate#IsBlockVisual() ? delimitMate#MapMsg("Message") : "s'\<C-R>\"'\<Esc>:call delimitMate#RestoreRegister()<CR>"
|
|
||||||
exec 'vnoremap <buffer> <expr> ' . vleader . quote . ' delimitMate#IsBlockVisual() ? delimitMate#MapMsg("' . VMapMsg . '") : mode() ==# "V" ? "s' . escape(quote,'"') .'\<C-R>\"\<BS>' . escape(quote,'"') . '\<Esc>:call delimitMate#RestoreRegister()<CR>" : "s' . escape(quote,'"') .'\<C-R>\"' . escape(quote,'"') . '\<Esc>:call delimitMate#RestoreRegister()<CR>"'
|
|
||||||
endfor
|
endfor
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
@@ -457,9 +488,11 @@ function! delimitMate#UnMap() " {{{
|
|||||||
\ b:delimitMate_left_delims +
|
\ b:delimitMate_left_delims +
|
||||||
\ b:delimitMate_quotes_list +
|
\ b:delimitMate_quotes_list +
|
||||||
\ b:delimitMate_apostrophes_list +
|
\ b:delimitMate_apostrophes_list +
|
||||||
\ ['<BS>', '<S-BS>', '<CR>', '<Space>', '<S-Tab>', '<Esc>'] +
|
\ ['<BS>', '<S-BS>', '<Del>', '<CR>', '<Space>', '<S-Tab>', '<Esc>'] +
|
||||||
\ ['<Del>', '<Up>', '<Down>', '<Left>', '<Right>', '<LeftMouse>', '<RightMouse>']
|
\ ['<Up>', '<Down>', '<Left>', '<Right>', '<LeftMouse>', '<RightMouse>']
|
||||||
let vmaps = b:delimitMate_right_delims +
|
|
||||||
|
let vmaps =
|
||||||
|
\ b:delimitMate_right_delims +
|
||||||
\ b:delimitMate_left_delims +
|
\ b:delimitMate_left_delims +
|
||||||
\ b:delimitMate_quotes_list
|
\ b:delimitMate_quotes_list
|
||||||
|
|
||||||
@@ -475,8 +508,7 @@ function! delimitMate#UnMap() " {{{
|
|||||||
let vleader = b:delimitMate_visual_leader
|
let vleader = b:delimitMate_visual_leader
|
||||||
endif
|
endif
|
||||||
for map in vmaps
|
for map in vmaps
|
||||||
exec 'let result = maparg("' . escape(vleader . map, '"') . '", "v") =~? "delimitMate" ? 1 : 0'
|
if maparg(vleader . map, "v") =~? "delimitMate"
|
||||||
if result == 1
|
|
||||||
exec 'silent! vunmap <buffer> ' . vleader . map
|
exec 'silent! vunmap <buffer> ' . vleader . map
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
|
|||||||
@@ -27,6 +27,9 @@ endif
|
|||||||
let s:loaded_delimitMate = 1 " }}}
|
let s:loaded_delimitMate = 1 " }}}
|
||||||
let delimitMate_version = '2.1_DEV'
|
let delimitMate_version = '2.1_DEV'
|
||||||
|
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
" Tools: {{{
|
||||||
function! s:Init() "{{{
|
function! s:Init() "{{{
|
||||||
|
|
||||||
let b:loaded_delimitMate = 1
|
let b:loaded_delimitMate = 1
|
||||||
@@ -142,9 +145,7 @@ function! s:Init() "{{{
|
|||||||
call delimitMate#ExtraMappings()
|
call delimitMate#ExtraMappings()
|
||||||
|
|
||||||
endfunction "}}} Init()
|
endfunction "}}} Init()
|
||||||
"}}}
|
|
||||||
|
|
||||||
" Tools: {{{
|
|
||||||
function! s:TestMappingsDo() "{{{
|
function! s:TestMappingsDo() "{{{
|
||||||
if !exists("g:delimitMate_testing")
|
if !exists("g:delimitMate_testing")
|
||||||
call delimitMate#TestMappings()
|
call delimitMate#TestMappings()
|
||||||
@@ -171,7 +172,6 @@ function! s:TestMappingsDo() "{{{
|
|||||||
endif
|
endif
|
||||||
endfunction "}}}
|
endfunction "}}}
|
||||||
|
|
||||||
|
|
||||||
function! s:DelimitMateDo() "{{{
|
function! s:DelimitMateDo() "{{{
|
||||||
if exists("g:delimitMate_excluded_ft")
|
if exists("g:delimitMate_excluded_ft")
|
||||||
" Check if this file type is excluded:
|
" Check if this file type is excluded:
|
||||||
@@ -189,8 +189,6 @@ function! s:DelimitMateDo() "{{{
|
|||||||
let save_keymap = &keymap
|
let save_keymap = &keymap
|
||||||
set keymap=
|
set keymap=
|
||||||
set cpo&vim
|
set cpo&vim
|
||||||
let save_keymap = &keymap
|
|
||||||
set keymap=
|
|
||||||
call s:Init()
|
call s:Init()
|
||||||
finally
|
finally
|
||||||
let &cpo = save_cpo
|
let &cpo = save_cpo
|
||||||
|
|||||||
Reference in New Issue
Block a user