diff options
Diffstat (limited to 'plugin/system_copy.vim')
| -rw-r--r-- | plugin/system_copy.vim | 20 | 
1 files changed, 14 insertions, 6 deletions
| diff --git a/plugin/system_copy.vim b/plugin/system_copy.vim index f9ebba6..98b7d0b 100644 --- a/plugin/system_copy.vim +++ b/plugin/system_copy.vim @@ -10,17 +10,25 @@ let g:loaded_system_copy = 1  function! s:system_copy(type, ...) abort    let mode = <SID>resolve_mode(a:type, a:0) -  echohl String | echon 'Activated from: ' . mode | echohl None +  if mode == s:linewise +    let first = line("'[") +    let last = line("']") +    let to_copy = join(getline(first, last), '
') +  elseif mode == s:visual || mode == s:blockwise +    silent exe "normal! `<" . a:type . "`>y" +    let to_copy = getreg('@') +  else +    silent exe "normal! `[v`]y" +    let to_copy = getreg('@') +  endif +  silent call system('pbcopy', to_copy) +  echohl String | echon 'Copied to system clipboard via: ' . mode | echohl None  endfunction  function! s:resolve_mode(type, arg)    let visual_mode = a:arg != 0    if visual_mode -    if a:type == '' -      return s:blockwise -    else -      return s:visual -    end +    return (a:type == '') ?  s:blockwise : s:visual    elseif a:type == 'line'      return s:linewise    else | 
