Last active
March 22, 2026 16:32
-
-
Save toien/31c870c2d44f8f002738d676e28a1307 to your computer and use it in GitHub Desktop.
vimrc function: sync remote host yank to local clipboard
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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