From f89a83ece861d5f0beb745af763aed77c6c6fa81 Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Sat, 11 Jun 2022 08:55:29 +0800 Subject: [PATCH] fix(clipboard): fix `leader y` key binding --- autoload/SpaceVim/default.vim | 2 +- bundle/vim-clipboard/autoload/clipboard.vim | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/autoload/SpaceVim/default.vim b/autoload/SpaceVim/default.vim index 1373c67ff..03bd8c3b6 100644 --- a/autoload/SpaceVim/default.vim +++ b/autoload/SpaceVim/default.vim @@ -161,7 +161,7 @@ endfunction function! SpaceVim#default#keyBindings() abort call SpaceVim#logger#debug('init default key bindings.') - xnoremap y clipboard#yank() + xnoremap y :call clipboard#yank() nnoremap p clipboard#paste('p') nnoremap P clipboard#paste('P') xnoremap p clipboard#paste('p') diff --git a/bundle/vim-clipboard/autoload/clipboard.vim b/bundle/vim-clipboard/autoload/clipboard.vim index fd6de2c95..b259960fe 100644 --- a/bundle/vim-clipboard/autoload/clipboard.vim +++ b/bundle/vim-clipboard/autoload/clipboard.vim @@ -52,7 +52,6 @@ endfunction " yank to system clipboard function! clipboard#yank() abort call system(s:yank_cmd, s:get_selection_text()) - return '' endfunction @@ -65,11 +64,16 @@ endfunction function! s:get_selection_text() - let save_x = @x - normal gv"xy - let result = @x - let @x = save_x - return result + let [begin, end] = [getpos("'<"), getpos("'>")] + let lastchar = matchstr(getline(end[1])[end[2]-1 :], '.') + if begin[1] ==# end[1] + let lines = [getline(begin[1])[begin[2]-1 : end[2]-2]] + else + let lines = [getline(begin[1])[begin[2]-1 :]] + \ + (end[1] - begin[1] <# 2 ? [] : getline(begin[1]+1, end[1]-1)) + \ + [getline(end[1])[: end[2]-2]] + endif + return join(lines, "\n") . lastchar . (visualmode() ==# 'V' ? "\n" : '') endfunction let [s:yank_cmd, s:paste_cmd] = s:set_command()