Merge pull request #14848 from shadmansaleh/fixup/block_paste_clipboard

fix(clipboard): Fix block paste from system clipboard not working properly
This commit is contained in:
Björn Linse 2021-07-01 15:47:21 +02:00 committed by GitHub
commit a50a3a12d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 1 deletions

View File

@ -156,7 +156,14 @@ function! s:clipboard.get(reg) abort
elseif s:selections[a:reg].owner > 0
return s:selections[a:reg].data
end
return s:try_cmd(s:paste[a:reg])
let clipboard_data = s:try_cmd(s:paste[a:reg])
if match(&clipboard, '\v(unnamed|unnamedplus)') >= 0 && get(s:selections[a:reg].data, 0, []) == clipboard_data
" When system clipboard return is same as our cache return the cache
" as it contains regtype information
return s:selections[a:reg].data
end
return clipboard_data
endfunction
function! s:clipboard.set(lines, regtype, reg) abort
@ -175,6 +182,9 @@ function! s:clipboard.set(lines, regtype, reg) abort
if s:cache_enabled == 0
call s:try_cmd(s:copy[a:reg], a:lines)
"Cache it anyway we can compare it later to get regtype of the yank
let s:selections[a:reg] = copy(s:selection)
let s:selections[a:reg].data = [a:lines, a:regtype]
return 0
end

View File

@ -506,6 +506,20 @@ describe('clipboard (with fake clipboard.vim)', function()
feed('p')
eq('textstar', meths.get_current_line())
end)
it('Block paste works currectly', function()
insert([[
aabbcc
ddeeff
]])
feed('gg^<C-v>') -- Goto start of top line enter visual block mode
feed('3ljy^k') -- yank 4x2 block & goto initial location
feed('P') -- Paste it infront
expect([[
aabbaabbcc
ddeeddeeff
]])
end)
end)
describe('clipboard=unnamedplus', function()