无剪贴板支持的Vim中使用xclip复制时c寄存器转义异常问题求助
解决Vim无剪贴板下xclip复制含反斜杠内容的转义问题
你的配置核心问题出在两个地方:
echo -n会解析字符串里的转义字符(比如\),导致原始内容被篡改- 仅用
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
相关产品推荐
相关产品推荐

