背景
VIM 各种快捷建溜得飞起, 然而与系统剪切板之间的复制粘贴一直都是我的痛.
每次需要从 VIM 中拷贝些文字去浏览器搜索, 都需要用鼠标选中 VIM 的文字后, Ctrl+c,Ctrl+v, 硬生生掐断了纯键盘的流畅感
而且, VIM 中的块选择多爽, 如果只想要拷贝某一个块的数据, 鼠标操作就完全没辙了
忍无可忍, 无需再忍, 今天就彻底解决这个问题
VIM 与系统剪切板之间的交互
VIM 支持 clipboard 特性
本章参考自 NearXDU 的博客
确认 VIM 编辑器是否支持 clipboard 特性
[GMPY@16:33 ~]$ VIM --version| grep "clipboard"
支持这特性的检索结果应该包含 +clipboard, 而不支持则会是 -clipboard
如果不支持怎么办? 安装新的 VIM 吧. 可以参考这边文章 从源码安装 VIM
VIM 的寄存器
本章参考自 rainysia 的博客
VIM 会有一些存储空间来暂存内容, VIM 中将这些存储空间叫寄存器. 此寄存器非我们硬件所说的寄存器, 可以理解为是一种 cache.
例如我们在 VIM 中 y 操作复制的内容, 实际就是暂存到寄存器中.
怎么查看寄存器内容呢? 在 VIM 中执行
:reg
在 VIM 中, 这些寄存器也有好几个
表示符号 | 名称 | 作用 |
---|---|---|
"" | 无名(unnamed)寄存器 | 缓存最后一次操作内容 |
"0 ~"9 | 数字(numbered)寄存器 | 缓存最近操作内容,复制与删除有别,"0 寄存器缓存最近一次复制的内容,"1-"9 缓存最近 9 次删除内容 |
"- | 行内删除(small delete)寄存器 | 缓存行内删除内容 |
“a ~ "z 或"A - ”Z | 具名(named)寄存器 | 可用于主动指定 |
":,"., "%,"# | 只读(read-only)寄存器 | 分别缓存最近命令、最近插入文本、当前文件名、当前交替文件名 |
"= | 表达式(expression)寄存器 | 用于执行表达式命令 |
"*,"+, "~ | 选择及拖拽(selection and drop)寄存器 | 存取 GUI 选择文本,可用于与外部应用交互 |
"_ | 黑洞(black hole)寄存器 | 不缓存操作内容(干净删除) |
"/ | 模式寄存器(last search pattern) | 缓存最近的搜索模式 |
为了要与系统的剪切板交互, 我们着重关注 "* 和"+
在 VIM 中进入 visual 视图后使用 "Ny(N 表示特定寄存器编好), 将内容复制到特定的剪切板
因此, 如果要把数据从 VIM 拷贝到系统剪切板, 我们只需要在 visual 模式下执行
"+y
注意的是, 是 双引号 + 加号寄存器 + y. 通过这命令 copy 后就可以去浏览器 Ctrl+v 啦
如果从浏览器 Ctrl+c 后, 要粘贴到 VIM 中, 则需要
"+p"* 和 "+ 有什么差别呢?"* 是在系统剪切板中表示选择的内容
"+ 是在系统剪切板中表示选择后 Ctrl+c 复制的内容
使用快捷键
"+y 和"+p 的输入挺麻烦的, 我们直接为他们创建个快捷键吧
VIM 创建快捷键的原理可以看 jalused 的博客
我使用的快捷键如下
" 支持在 Visual 模式下, 通过 C-y 复制到系统剪切板
vnoremap <C-y> "+y
" 支持在 normal 模式下, 通过 C-p 粘贴系统剪切板
nnoremap <C-p> "*p
将上面的内容 copy 到~/.vimrc 中即可生效, 效果就是:
在 VIM 的 visual 模式下选中了要复制的内容, 再用 Ctrl + y 复制到系统剪切板, 直接去其他窗口中 Ctrl + v 粘贴
在其他窗口中选择之后 (不一定要 Ctrl + c), 可直接在 VIM 中用 Ctrl + p 来粘贴
来源: https://www.cnblogs.com/gmpy/p/11177719.html