背景

vim各种快捷建溜得飞起,然而与系统剪切板之间的复制粘贴一直都是我的痛。

每次需要从vim中拷贝些文字去浏览器搜索,都需要用鼠标选中vim的文字后,Ctrl+cCtrl+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中即可生效,效果就是:

  1. 在vim的visual模式下选中了要复制的内容,再用Ctrl + y复制到系统剪切板,直接去其他窗口中Ctrl + v粘贴
  2. 在其他窗口中选择之后(不一定要Ctrl + c),可直接在vim中用Ctrl + p来粘贴

最新文章

  1. Oracle Deadlock / 死锁 处理
  2. [linux]解决vsftpd 读取目录列表失败的问题
  3. 每周一书-《Bootstrap基础教程》
  4. drupal7安装中文错误
  5. codevs 1060
  6. Kruskal算法构造最小生成树
  7. drupal7 开发block
  8. php基础知识(二)---2017-04-14
  9. VBScript中InStr函数的用法
  10. springboot+springmvc+mybatis项目整合
  11. .NET Core快速入门教程 5、使用VS Code进行C#代码调试的技巧
  12. 用app.net Core搞掂多国语言网站
  13. mac 下 tomcat7的安装
  14. 学以致用三十-----pycharm创建django项目忘记添加app
  15. Acceleration for ML 论文导读
  16. Halcon常用算子01
  17. oracle数据库flashback系列--闪回数据库在dataguard中的使用
  18. apache+php windows下配置
  19. float 为什么不能用== ,或者大于等于,或者小于等于
  20. [Swift实际操作]七、常见概念-(4)范围CGRect的使用详解

热门文章

  1. WPF UpdateSourceTrigger的使用
  2. Expression Blend学习四控件
  3. QML中文件的加载(三种方法)
  4. ARC forbids explicit message send of&#39;retain&#39;解决办法
  5. WPF ListboxItem 双击事件 Command绑定
  6. MySQL 常用数据存储引擎区别
  7. 淘宝开源Key/Value结构数据存储系统Tair技术剖析
  8. Solr Principal - 工作原理/机制
  9. c#与JAVA利用SOCKET实现异步通信的SanNiuSignal.DLL已开源
  10. vista下开机启动 简单绕过UAC的方法(自己使用runas参数重新启动自己,有点意思)