" Use the OSC 52 escape sequence to copy text to the local system clipboard " when connected to a remote machine. function! osc52#init() augroup osc52 autocmd! " Add an autocmd to run after text is yanked. autocmd TextYankPost * call osc52#copy() augroup END " When connected to a remote session the + selection register is not " available and the unnamed register is used instead. Add normal and visual " mode mappings using the z register instead. nnoremap y "zy nnoremap Y "zY vnoremap y "zy vnoremap Y "zY endfunction function! osc52#copy() " Only use OSC 52 when text is yanked with the z register. if v:event['regname'] ==# 'z' " Get the register contents and join the list into a string. let l:content = join(v:event['regcontents'], "\n") if v:event['regtype'] ==# 'V' " Append a new line in linewise-visual mode to avoid surprises. let l:content = l:content."\n" endif " Get the parent tty while being compatible with vim and neovim, originally " from https://github.com/greymd/oscyank.vim let l:tty = system('(tty || tty < /proc/$PPID/fd/0) 2> /dev/null | grep /dev/') " Base 64 encode the content, and print OSC 52 escape sequence to the tty. call system('base64 | xargs -0 printf "\\033]52;c;%s\\a" > '.l:tty, l:content) endif endfunction