Skip to content

Instantly share code, notes, and snippets.

@toien
Last active March 22, 2026 16:32
Show Gist options
  • Select an option

  • Save toien/31c870c2d44f8f002738d676e28a1307 to your computer and use it in GitHub Desktop.

Select an option

Save toien/31c870c2d44f8f002738d676e28a1307 to your computer and use it in GitHub Desktop.
vimrc function: sync remote host yank to local clipboard
function! Osc52Yank()
" 注意:如果你的 Vim 不支持 clipboard,复制时需要使用 " 寄存器
if v:event.regname !=# '"'
return
endif
" 自动获取最后一次复制的内容(使用 v:event.regcontents 避免寄存器偏移)
let l:content = join(v:event.regcontents, "\n")
if empty(l:content) | return | endif
" 进行 Base64 编码
let l:b64 = system("base64 | tr -d '\n'", l:content)
let l:osc = "\e]52;c;" . l:b64 . "\x07"
" Tmux 穿透处理
if !empty($TMUX)
let l:osc = "\ePtmux;\e" . substitute(l:osc, "\e", "\e\e", "g") . "\e\\"
endif
" 使用直接写入 tty 的方式,这比 echon 在自动命令中更稳定
call writefile([l:osc], "/dev/tty", "b")
endfunction
" 只要发生 y 操作就触发同步
augroup Osc52
autocmd!
autocmd TextYankPost * call Osc52Yank()
augroup END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment