" Use the OSC 52 escape sequence to copy text to the local system clipboard " when connected to a remote machine. " Add an autocmd to run after text is yanked. function! osc52#autocmd() augroup osc52 autocmd! autocmd TextYankPost * call osc52#copy() augroup END 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