MacVim执行命令后复制输出内容至剪贴板或编辑器的问题
我之前也踩过这个坑——用!执行外部命令(比如!go test)时,输出的内容没法用Cmd+C直接复制,毕竟这些内容是在Vim的临时命令行输出缓冲区里,不是常规的编辑文本内容。下面给你几个实用的解决办法:
把命令输出导入到Vim编辑缓冲区
别用!go test直接运行,改用:r!go test。这个命令会把go test的所有输出插入到当前光标所在的位置,变成普通的可编辑文本。之后你就可以用鼠标选中,Cmd+C复制到系统剪贴板,或者用Vim自带的复制命令(比如yy复制整行、yaw复制单词),再用"+y直接复制到系统剪贴板(前提是你的MacVim支持剪贴板功能)。直接把输出管道到系统剪贴板
如果不需要在Vim里查看输出,只想复制结果,直接把命令输出传给macOS的pbcopy工具::!go test | pbcopy执行完这条命令,
go test的所有输出就直接存到系统剪贴板了,打开其他应用Cmd+V就能粘贴。要是只需要部分内容,可以先把输出存到临时文件再编辑::!go test > /tmp/test_result.txt :e /tmp/test_result.txt打开这个临时文件后,就能随意选中复制你需要的内容了。
用
:redir捕获输出到剪贴板寄存器
如果你想在Vim里查看输出,同时又要复制到剪贴板,可以用Vim的重定向命令:redir把输出存到系统剪贴板寄存器+里::redir @+ :!go test :redir END执行完这三行,
go test的输出就被存到+寄存器了,你可以在Vim里用"+p粘贴,或者直接在系统其他地方Cmd+V粘贴。
最后检查下你的MacVim是否支持系统剪贴板:在Vim里输入:echo has('clipboard'),如果输出1就说明支持;如果是0,建议重新安装带剪贴板支持的版本,比如用Homebrew安装的brew install macvim默认就支持这个功能。
内容的提问来源于stack exchange,提问作者Wayne

