You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无剪贴板支持的Vim中使用xclip复制时c寄存器转义异常问题求助

解决Vim无剪贴板下xclip复制含反斜杠内容的转义问题

你的配置核心问题出在两个地方:

  1. echo -n会解析字符串里的转义字符(比如\),导致原始内容被篡改
  2. 仅用escape(@c, '"')只处理了双引号,没覆盖shell需要转义的其他特殊字符(比如反斜杠、空格、感叹号等)

直接替换成以下配置即可解决问题:

" ctrl-c 复制到系统剪贴板
vnoremap <C-c> "cy :call system('printf "%s" ' . shellescape(@c) . ' > ' . shellescape(tmp) . ' && xclip ' . shellescape(tmp) . ' -selection clipboard && rm -rf ' . shellescape(tmp) . ' & disown')<CR><CR>

关键修正点:

  • 用printf "%s"替代echo -n:printf会原样输出所有内容,不会解析任何转义字符,完美保留原始文本
  • 对@c使用shellescape():自动处理所有shell特殊字符的转义,包括反斜杠、双引号、空格等,确保内容能正确传递给shell命令
  • 给tmp也加上shellescape():避免临时文件名包含特殊字符时出现执行错误
  • 用&&替代;:只有前一步命令执行成功时才会继续后续操作,避免复制失败时仍错误删除临时文件

另外注意:如果你的vimrc里没定义tmp变量,需要先加上这一行:

let tmp = tempname()

tempname()会生成唯一的临时文件名,避免多个操作时的文件冲突。

内容的提问来源于stack exchange,提问作者Ella H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 23:15:56