Merge pull request #27 from inkarkat/fix-selection-exclusive

Support :set selection=exclusive
This commit is contained in:
Tom McDonald 2014-06-24 11:26:05 -04:00
commit 9c025e5914

View File

@ -32,28 +32,33 @@ endfunction
function! s:exchange_get(type, vis) function! s:exchange_get(type, vis)
let reg = getreg('"') let reg = getreg('"')
let reg_mode = getregtype('"') let reg_mode = getregtype('"')
let selection = &selection
let &selection = 'inclusive'
if a:vis if a:vis
let type = a:type let type = a:type
let [start, end] = s:store_pos("'<", "'>") let [start, end] = s:store_pos("'<", "'>")
silent exe "normal! `<" . a:type . "`>y" silent normal! gvy
elseif a:type == 'line' if &selection ==# 'exclusive' && start != end
let type = 'V' let end[2] -= len(matchstr(@@, '\_.$'))
let [start, end] = s:store_pos("'[", "']") endif
silent exe "normal! '[V']y"
elseif a:type == 'block'
let type = "\<C-V>"
let [start, end] = s:store_pos("'[", "']")
silent exe "normal! `[\<C-V>`]y"
else else
let type = 'v' let selection = &selection
let [start, end] = s:store_pos("'[", "']") let &selection = 'inclusive'
silent exe "normal! `[v`]y" if a:type == 'line'
let type = 'V'
let [start, end] = s:store_pos("'[", "']")
silent exe "normal! '[V']y"
elseif a:type == 'block'
let type = "\<C-V>"
let [start, end] = s:store_pos("'[", "']")
silent exe "normal! `[\<C-V>`]y"
else
let type = 'v'
let [start, end] = s:store_pos("'[", "']")
silent exe "normal! `[v`]y"
endif
let &selection = selection
endif endif
let text = getreg('@') let text = getreg('@')
call setreg('"', reg, reg_mode) call setreg('"', reg, reg_mode)
let &selection = selection
return [text, type, start, end] return [text, type, start, end]
endfunction endfunction