From 750002ade00e2b8264bb131906a605e49985d812 Mon Sep 17 00:00:00 2001 From: Tomasz Łaziuk Date: Sun, 19 Jul 2015 10:48:53 +0200 Subject: Add support and mapping for pasting from clipboard --- plugin/system_copy.vim | 49 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 4 deletions(-) (limited to 'plugin') diff --git a/plugin/system_copy.vim b/plugin/system_copy.vim index 80a58f0..2c6bc7c 100644 --- a/plugin/system_copy.vim +++ b/plugin/system_copy.vim @@ -2,6 +2,9 @@ let s:blockwise = 'blockwise visual' let s:visual = 'visual' let s:motion = 'motion' let s:linewise = 'linewise' +let s:mac = 'mac' +let s:windows = 'windows' +let s:linux = 'linux' if exists('g:loaded_system_copy') || &cp || v:version < 700 finish @@ -22,6 +25,12 @@ function! s:system_copy(type, ...) abort echohl String | echon 'Copied to system clipboard via: ' . mode | echohl None endfunction +function! s:system_paste() abort + let command = PasteCommandForCurrentOS() + put =system(command) + echohl String | echon 'Pasted to vim using: ' . command | echohl None +endfunction + function! s:resolve_mode(type, arg) let visual_mode = a:arg != 0 if visual_mode @@ -33,23 +42,55 @@ function! s:resolve_mode(type, arg) endif endfunction -function! s:CopyCommandForCurrentOS() +function! s:currentOS() let os = substitute(system('uname'), '\n', '', '') - if has("gui_mac") || os == 'Darwin' - return 'pbcopy' + let known_os = 'unknown' + if has("gui_mac") || os ==? 'Darwin' + let known_os = s:mac elseif has("gui_win32") - return 'clip' + let known_os = s:windows + elseif os ==? 'Linux' + let known_os = s:linux else + exe "normal \" + throw "unknown OS: " . os + endif + return known_os +endfunction + +function! s:CopyCommandForCurrentOS() + let os = currentOS() + if os == s:mac + return 'pbcopy' + elseif os == s:windows + return 'clip' + elseif os == s:linux return 'xsel --clipboard --input' endif endfunction +function! s:PasteCommandForCurrentOS() + let os = currentOS() + if os == s:mac + return 'pbpaste' + elseif os == s:windows + return 'paste' + elseif os == s:linux + return 'xsel --clipboard --output' + endif +endfunction + xnoremap SystemCopy :call system_copy(visualmode(),visualmode() ==# 'V' ? 1 : 0) nnoremap SystemCopy :set opfunc=system_copyg@ nnoremap SystemCopyLine :set opfunc=system_copyexe 'norm! 'v:count1.'g@_' +nnoremap SystemPaste :call system_paste() if !hasmapto('SystemCopy') || maparg('cp','n') ==# '' xmap cp SystemCopy nmap cp SystemCopy nmap cP SystemCopyLine endif + +if !hasmapto('SystemPaste') || maparg('cv','n') ==# '' + nmap cv SystemPaste +endif -- cgit v1.2.3