mac下vim复制文本到系统剪切板

vim编辑器

2021更新:

别折腾了,装neovim吧,兼容vim各种插件,体验也比vim好多了,不只是一个剪贴板的事


原答案:

在mac系统下,使用vim编辑器已经几个月了,但是被一个问题一直困扰:vim不能使用系统剪贴板!而且我的问题很奇怪,周围同事和我一样的mac,系统也一样,同样用vim,他们能复制,我却不能。如果你和我一样,那可能我能帮到你。

我到现在还是没找出来我的vim工作下mac下不支持复制的原因,但是还是找出了一些办法解决此问题:

至于网上说的

检查+clipboard.vimrcset clipboard=unamed,使用xx寄存器等。

我一一试过,均无法解决此问题,找到的方法基本无效,无论系统自带的vi,vim,还是brew install的vim,又或者nvim,均无法使用复制功能,macvim支持复制,但是开发web的时候,开一个命令行终端,再开一个编辑器,显然不是一个好的选择,我决定还是继续使用vim。

后来一直谷歌,勉强接受了这个复制方法:

map <C-x> :!pbcopy<CR>
vmap <C-c> :w !pbcopy<CR><CR>

上面的方法只能复制一行,类似的可以复制全文,这时候复制一段文本还是很难受,因为command(⌘)+ c是没有用的,通过鼠标在vim里右击,选择copy,可以复制一个单词。那要是复制任意一部分呢?

在不断谷歌之后,找到了一种尚可接受的方法:按住option,鼠标选择需要复制的区域,然后command(⌘)+ c,完美复制。

虽然完美复制,不过操作还是很繁琐好吗?

于是继续不断谷歌,终于在stackoverflow寻到更好的解决方法了,那就是在vimrc下加入这一行:

map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>

尝试过把map换成nnoremap,发现会失效,不过现在终于可以直接用Control+ c复制想要的内容了啊,visual下选中的内容,统统复制!


2018.4.13 16:30更新

发现之前的map 在刚开vim的时候使用会报错:

no write since last change for buffer

原因是对一个new buffer使用了:bdelete!

于是自己在原来的基础上改造了一下:

map <C-c> y:e ~/clipsongzboard<CR>P:w<cr>:w !pbcopy<CR><cr>:1,$d<cr>:w<cr><C-o><C-o>

当然,用惯了vim的我,觉得control + c这种键实在不方便,比如我使用的是<leader>+y。另外,指令中的~/clipsongzboard是根目录下的一个文件,被我用来当剪贴板了。

发表于 2018.04.13