Vim

剪贴板

如果你想在没有 GUI 支持的 Unix 系统中使用 VIM 的 'clipboard' 选项,则需要 +clipboard 以及可选的 +xterm_clipboard 两个特性支持。帮助文档:

:h 'clipboard'
:h gui-clipboard
:h gui-selections

另外请参考: 持续粘贴(为什么我每次都要设置 paste 模式

剪贴板的使用(Windows, OSX)

Windows 自带了剪贴板,OSX 则带了一个粘贴板。在这两个系统中都可以用大家习惯用的 ctrl+c / cmd+c 复制选择的文本,然后在另外一个应用中用 ctrl+v / cmd+v 进行粘贴。需要注意的是复制的文本已经被发送到了剪贴板,所以你在粘贴复制的内容之前关闭这个应用是没有任何问题的。每次复制的时候,都会向剪贴板寄存器 * 中写入数据。 而在 VIM 中分别使用 "*y"*p 来进行复制(yank) 和 粘贴(paste)。如果你不想每次操作都要指定 * 寄存器,可以在你的 vimrc 中添加如下配置:

set clipboard=unnamed

通常情况下复制/删除/放入操作会往 " 寄存器中写入数据,而加上了上面的配置之后 * 寄存器也会被写入同样数据,因此简单的使用 yp 就可以复制粘贴了。

我再说一遍:使用上面的选项意味着每一次的复制/粘贴,即使在同一个 VIM 窗口里,都会修改剪贴板的内容。你自己决定上面的选项是否适合。

如果你觉得输入 y 还是太麻烦的话,可以使用下面的设置把在可视模式下选择的内容发送到剪贴板:

set clipboard=unnamed,autoselect
set guioptions+=a

帮助文档:

:h clipboard-unnamed
:h autoselect
:h 'go_a'

剪贴板的使用(Linux, BSD, ...)

如果你的系统使用了 X 图形界面,事情会变得有一点不同。X 图形界面实现了 X 窗口系统协议, 这个协议在 1987 年发布的主版本 11,因此 X 也通常被称为 X11。在 X10 版本中,剪贴缓冲区被用来实现像 clipboard 一样由 X 来复制文本,并且可以被所有的程序访问。现在这个机制在 X 中还存在,但是已经过时了,很多程序都不再使用这一机制。近年来数据在程序之间是通过选择进行传递的。一共有三种选择,经常用到的有两种:PRIMARY 和 CLIPBOARD。选择的工作工模大致是这样的:

Program A:<ctrl+c>
Program A:声称对 CLIPBOARD 的所有权
Program B:<ctrl+v>
Program B:发现CLIPBOARD的所有权被Program A持有
Program B:从Program A请求数据
Program A:响应这个请求并发送数据给Program B
Program B:从Program A接收数据并插入到窗口中
选择 何时使用 如何粘贴 如何在 VIM 中访问
PRIMARY 选择文本 鼠标中键, shift+insert * 寄存器
CLIPBOARD 选择文本并按ctrl+c ctrl+v +寄存器

注意 :X 服务器并不会保存选择(不仅仅是 CLIPBOARD 选择)!因此在关闭了相应的程序后,你用 ctrl+c 复制的内容将丢失。

使用 "*p 来贴粘 PRIMARY 选择中的内容,或者使用 "+y1G 来将整个文件的内容复制到 CLIPBOARD 选择。如果你需要经常访问这两个寄存器,可以考虑使用如下配置:

set clipboard^=unnamed          " * 寄存器
" 或者
set clipboard^=unnamedplus      " + 寄存器

^= 用来将设置的值加到默认值之前,详见::h :set^=

这会使得所有复制/删除/放入操作使用 *+ 寄存器代替默认的未命令寄存器 "。之后你就可以直接使用 yp 访问你的 X 选择了。

帮助文档:

:h clipboard-unnamed
:h clipboard-unnamedplus