如何让WSL Ubuntu中的Vim调用Windows剪贴板?
我之前在Win10的WSL Ubuntu里折腾Vim剪贴板的时候,也碰到过和你一模一样的情况——明明装了带+xterm_clipboard的vim-gtk,设了set clipboard=unnamedplus,但各种复制粘贴操作就是不生效。后来试了几个办法终于搞定了,给你分享下:
1. 先确认Vim的剪贴板支持是否完整
先打开Vim,输入:version,看看输出里有没有+clipboard和+xterm_clipboard这两个标识。如果只有-clipboard,那哪怕装了vim-gtk也可能是没正确配置,这种情况可以先重新安装vim-gtk:
sudo apt remove vim-gtk sudo apt install vim-gtk
安装完再重新检查版本,确保两个加号都存在。
2. 配置Vim使用Windows剪贴板工具(win32yank)
WSL本身和Windows剪贴板的交互需要一个中间工具,win32yank.exe是最常用的。你可以直接从WSL里下载它:
curl -sLo /tmp/win32yank.zip https://github.com/equalsraf/win32yank/releases/latest/download/win32yank-x64.zip unzip -p /tmp/win32yank.zip win32yank.exe > /usr/local/bin/win32yank.exe chmod +x /usr/local/bin/win32yank.exe
然后在你的~/.vimrc里添加以下配置,让Vim用这个工具来处理剪贴板:
set clipboard=unnamedplus let g:clipboard = { \ 'name': 'win32yank', \ 'copy': { \ '+': 'win32yank.exe -i --crlf', \ '*': 'win32yank.exe -i --crlf', \ }, \ 'paste': { \ '+': 'win32yank.exe -o --lf', \ '*': 'win32yank.exe -o --lf', \ }, \ 'cache_enabled': 0, \ }
保存退出后重启Vim,试试用yy复制一行,然后到Windows的记事本里粘贴,应该就能生效了;反过来从Windows复制内容,在Vim里按p也能粘贴。
3. 针对WSL 2的额外注意事项
如果你的WSL是版本2,要确保Windows 10的版本在2004(内部版本19041)及以上,这个版本之后WSL 2才支持剪贴板的原生集成。如果版本不够,建议先升级系统。另外,有时候需要确保WSL的剪贴板服务在运行,可以试试重启WSL:
wsl --shutdown
然后重新打开Ubuntu终端。
4. 避免X Server的坑(如果用了图形化Vim)
如果你是通过X Server(比如VcXsrv)运行vim-gtk的图形界面,要确保X Server启动时勾选了“Disable access control”选项,不然Vim可能没有权限访问剪贴板。而且要把DISPLAY环境变量正确设置,一般WSL里会自动设置,但如果没生效,可以手动在终端里输入:
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0
然后再启动vim-gtk试试。
试完这些步骤,应该就能让Vim和Windows剪贴板顺畅交互了。
内容的提问来源于stack exchange,提问作者dman

