前言
问题①
mac本机的vim在开启
set mouse=a鼠标操作后,直接用鼠标没办法复制
解决①
(最简单):将vim换macvim
安装命令:
1 | brew install macvim |
之后用mvim代替vim
如果想直接用vim调用mvim,可以在~/.zshrc中添加这一条
1 | alias vim="mvim" |
解决②
(简单,但有缺陷)
contrl^+拖动鼠标选择,即可直接复制
缺陷:如果开启了set number来显示行号,需要关闭set nonumber,否则会将行号复制进去.
只能复制当前页面的内容,换行没法处理等缺陷.
解决③
看本文后续内容.
问题②
将远程服务器(VPS)某个文本文件内容或某些文本内容拷贝到本地Mac剪切板.
解决①
在iTerm2中开启Applications in terminal may access clipboard

新建pbcopy.py文件,内容为:
1 |
|
然后给权限chmod +x pbcopy.py
然后软链接一下sudo ln -s /路径/pbcopy.py /usr/bin/pbcopy
用法:通过管道给pbcopy
可以参考文章(采用php实现的)https://www.laruence.com/2020/05/21/5880.html
问题③(复杂Max)
远程服务器(VPS)的vim在开启
set mouse=a鼠标操作后,直接用鼠标没办法复制.远程服务器(VPS)和Mac之间剪贴板互通问题.
解决①
先按照本文后续内容配置.
如果你的Linux是带图形化界面的,那么大概率就配完了(实际,我没测试,因为我除了虚拟机的linux带图形化界面外,服务器(vps)都玩不带图形化界面的命令行),如果不是,那么继续.
下面内容 基于X11 Forwarding + XQuartz 等第三方工具 实现图形化界面显示.
为啥?因为你配完,vim里面进行复制(y)会把vim里面的寄存器reg "" 值给linux系统的剪贴板,而它的内容和Mac的剪贴板内容不互通,故需要通过某种协议(下面用的是X协议)来进行交换.
客户端(Mac端)需要配置:
安装xquartz
1 | brew install xquartz |
在 Host * 下添加 ForwardX11 yes 然后重启ssh服务,但我实在不知道用那个命令能杀死ssh服务,故我直接重启系统.
可选: 点击 XQuartz 右键 自定义 添加一个命令(/Applications/iTerm.app/Contents/MacOS/iTerm2)指向 iTerm2
(未知原因:需打开过xterm才可用.)

如何在扩展坞和应用程序切换器中隐藏XQuartz应用程序图标?
以 root 身份编辑 /Applications/Utilities/XQuartz.app/Contents/Info.plist 中的 Info.plist,并在中末尾添加以下键/值(转到文件的最底部并找到最后两行之前):
1 | <key>NSUIElement</key> |
然后在命令中输入下面命令(强制签名)
1 | sudo codesign -f -s - --timestamp=none --all-architectures /Applications/Utilities/XQuartz.app/Contents/MacOS/X11 |
然后打开XQuartz(其实命令行中输xterm然后关掉,一样的效果),发现只能在活动监视器只看到了.(这玩意有点吃内存300多MB)
服务端(远程服务器)需要配置:
注:下面以Arch Linux为例
1 | pacman -S xorg-xauth xclip |
连接服务器:
ssh -Y user@address
查看当前用户的图形显示服务器(X服务器显示位置)echo $DISPLAY
测试:
1 | echo "Hello, world" | xclip -selection clipboard |
参考文章:ZSH, tmux, Emacs 以及 SSH: 一个关于粘帖复制的故事
|下面是旧的内容,可略过|
解决通过iterm2进行ssh连接远程vps中使用vim复制不能传递到Mac本机剪贴板的问题.
记录一下烦人的VIM复制问题.本人的vim配置是有set mouse=a 方便鼠标操作的.也有set number来显示行号.烦人的是便捷复制让这2个不可兼得.
一直困扰我到今天,尝试了办法来解决,终于勉强能接受了…
在只有set mouse=a到情况下,在 iTerm 下直接按住 option 选择文本,再 command + C 复制就行了
但是一旦有set number来显示行号的,由于 iTerm 并不知道哪些是 vim 的文本内容,哪些是附加信息,多行选择时会把行号选进来.这就很烦.
在只有set number到情况下,虽然可以直接复制,但是没了鼠标快速操作和滚动.(个人主观认为:)挺麻烦而且慢的本人vim小白,操作vim键位不是很熟悉.知道通过键位输入效率高,大佬们勿怪.
关于 寄存器 哪些知识或者其他与操作无光的内容,参考此知乎链接🔗
本文直接说说我的操作吧.
首先再终端中输入这行命令
1 | vim --version | grep clipboard |
分为二种情况.
回显内容有 -clipboard
例如:

很遗憾,你的vim也许出了些问题或者不完整,我们需要重装来修复它.
根据系统类型选择,合适的命令进行修复.
Linux系统
Debian / Ubuntu
1 | sudo apt install vim-gtk |
操作例图:

Arch Linux / Manjaro
1 | pacman -S gvim |
MacOS系统
1 | brew install vim |
操作例图:

回显内容有 +clipboard
恭喜你,你的vim没有问题!

开始设置vim
终端中输入.
1 | vim ~/.vimrc |
回车,在末尾添加这一行(用于同步剪贴板寄存器)
1 | set clipboard^=unnamed,unnamedplus |

浅学复制相关姿势
现在你的y,p已经能和 ctrl-c和ctrl-v 一个效果,并且能互相混用。
但问题是不能用鼠标选中否则会进入 SELECT选择模式 ,这个模式下输入除了按ESC键以外几乎都会覆盖掉你选中的内容实测,输入y,虽然覆盖了,但也复制了.也可以再粘贴回去,不过还是感觉麻烦了 :)
那么,我们改怎么操作呢?个人认为正确做法应该是学习.👇
学习vim的一些操作,这里只说一下我认为是必要的内容.
首先,推荐一个类似于游戏学习vim的网站👉Learning VIM while playing a game
接下来讲一下,可能频率使用高的基本操作.
普通模式(NORMAL)下,
w 跳到下一个单词
b 跳到上一个单词
它们与shift结合,可以加快速度.
视图模式(VISUAL)下
以你光标位置开始(可以在按V切换到视图模式之前,点击你想要选中文本到开头).
w 选中到下一个单词
b 选中到上一个单词
shift功能在这里也一样.
然后就可以用 y 和 ctrl-c(Mac上是command+c)开始愉快的复制啦~
受限于篇幅,更多内容请自行学习.








