1 概述

vim中的复制,删除,替换(d,r,s,x,y等)的内容都会被保存到默认的未命名的寄存器中,之后可以通过p进行粘贴,但是,这个寄存器不是系统的剪贴版,很多时候需要vim与系统剪贴版的交互,那么,具体怎么做呢?

2 暴力解决

系统剪贴版复制vim时,新建一个文件,直接ctrl+v复制过去然后vim打开。

vim中的内容复制到系统剪贴版,使用cat+grep,在终端ctrl+c复制即可。

这是最简单也是比较通用的方法,不会受到什么vim不支持剪贴版之类的影响。

没错就是简单粗暴。

3 优雅的方案

当然上面的方法想必也不是您想要的,因此,这里介绍一种优雅一点的方法。

3.1 查看剪贴板支持

首先需要知道vim是否支持剪贴版:

vim --version | grep clipboard



如果有

+clipboard

就表示支持,没有的话比如笔者这个就不支持,需要安装。

笔者的Manjaro,可以使用yay安装,不过提示过期了:



也可以选择安装gvim,另外,Debian系的可以安装vim-gtk:

sudo apt install vim-gtk

Redhat系的需要安装vim-X11以及vim-enhanced,然后加个别名:

alias vi='vimx'
alias vim='vimx'

MacOS:

sudo brew install vim

3.2 系统剪贴板复制到vim

很简单,使用

"+p

"*p

即可,vim提供了

+ *

这两个寄存器与系统剪贴板进行交互,大多数系统上这两个系统一样,但在某些linux上可能不等价,以下是官方文档

+

对应ctrl+c,ctrl+v使用的系统剪贴板,

*

对应的是鼠标选择的内容,可以使用中间粘贴。

当然高版本的vim还有一种很简单的解决办法:Shift+Insert能直接粘贴。

3.3 vim寄存器复制到系统剪贴板

在vim中使用y进行复制,但是是复制到默认的未命名寄存器的,想要复制到系统剪贴版只需要把y改为

"+y

"*y

即可。

3.4 偷懒方法

所谓的偷懒方法就是把默认的未命名寄存器与系统剪贴板关联上,使用

set clipboard=unnamed

即可。vim7.3.74以上的版本可以使用:

set clipboard=unnamedplus

这样y,d,s,x等操作就和系统剪贴版关联上了。

4 寄存器相关知识

vim中的y,d,c,x,s等的操作的内容会复制到寄存器中,可以使用

:reg

查看寄存器的内容,使用

:help registers

查看帮助,另外,寄存器的常用操作包括:

"{register}y 复制到寄存器,默认register为未命名寄存器
"{register}p 粘贴寄存器的内容

比如

"a4yy
"+p

vim中提供了多种多样的寄存器,具体来说可以分为10种共48个寄存器。

4.1 未命名寄存器

""

也叫匿名寄存器,使用d,c,x等删除的字符会存放进匿名寄存器,换句话说,最近一次删除,修改,复制的内容都存放在这里,会覆盖。

4.2 编号寄存器

"0
"1
...
"9

从0到9共10个,可以细分为复制专用寄存器与删除专用寄存器,因为

"0

保存着最近一次y复制的内容,而

"1
...
"9

这9个寄存器保存着最近一次删除(d,c,s,x等)的内容。上一次删除的内容被存放在

"1

上上次的被存放在

"2

以此类推。

注意,只有整行的删除,和通过段落级别的移动指令的删除才会放进

"1

另外当指定寄存器后,比如

"ayy

不会写入到

"0

中,但是

"add

会写入到

"1

中,也就是说,指定寄存器后复制内容不会写入0寄存器,但是删除内容会写入1寄存器。

4.3 小删除寄存器

"-

不足一行的小删除会被放进去,包括s,d,c,x。与

"0

类似,用户指定寄存器后不会被写入。

4.4 命名寄存器

"a
"b
...

小写字母组成的26个寄存器,一般用来录制键盘宏,比如有如下内容:

iostream
string
cmath

可以把位置定位到第一行,然后

qaI#include<{ESC}A>{ESC}jq

其中

{ESC}

表示按下ESC键,这样第一行就加上include了,同时把宏记录到了寄存器a,接下来,使用

2@a

即可在剩余两行加上include。

另外,小写对应的大写字母的寄存器用于追加内容,比如:

"Ayy

可以向

"a

追加内容。

4.5 只读寄存器

". 上一次insert插入的内容
"% 当前文件名,从vim的工作目录到该文件的路径
": 上次命令模式下键入的命令,使用@:执行上次命令, .只能进行一些简单的重复,一些复杂的命令比如替换,需要使用@:

共三个,只读。

4.6 交替文件寄存器

"#

保存着当前窗口的交替文件。

交替文件是缓冲区(Buffer)上的一个文件,而缓冲区其实时vim中打开文件编辑时占用的那部分内存,编辑文件时,只是编辑缓冲区中的文件,当使用

:w

时,会把缓冲区的文件写入磁盘。

4.7 表达式寄存器

"=

计算vim脚本的返回值,输入后会跳转到命令行,此时若输入3+2,回车并p,会粘贴5。

4.8 选择拖放寄存器

上面已经介绍了两个:

"+
"*

还有一个是

"~

其中

"+
"*

在Mac与Windows上指的是系统剪贴板,在大多数X11,也就是带桌面环境的Linux发行版中是有区别的,上面也提到了一点:

"+ 系统剪贴板
"* 鼠标选中区域,可以中键粘贴

有文本拖拽到vim时,被存放在

"~

中,默认会将其中的内容插入到光标位置。

4.9 黑洞寄存器

"_

所有进入到里面的内容会消失,通常用于脚本中。

4.10 搜索寄存器

"/

存储上一次搜索的关键词。可写,通过

:let @/ = "123"

下一次搜索可直接

/

不输入关键词回车即可。

注意不存在

"?

寄存器。

5 参考

1.Vim 寄存器完全手册

2.Vim官方文档-1

3.Vim官方文档-2

4.知乎-如何将 Vim 剪贴板里面的东西粘贴到 Vim 之外的地方

vim与系统剪贴版的交互的更多相关文章

  1. VIM 与 系统剪切版

    1, 查看 vim 是否支持 clipboard 功能 $ vim --version | grep clipboard 2, 如果有 +clipboard 则跳过这一步; 如果显示的是 -clipb ...

  2. vim与系统剪切板之间的复制粘贴

    背景 vim各种快捷建溜得飞起,然而与系统剪切板之间的复制粘贴一直都是我的痛. 每次需要从vim中拷贝些文字去浏览器搜索,都需要用鼠标选中vim的文字后,Ctrl+c.Ctrl+v,硬生生掐断了纯键盘 ...

  3. 深度技术32位Win7系统Ghost版2014年

    深度技术32位Win7系统Ghost版,GhostWin7是指使用Ghost软件做成压缩包的Windows7,俗称克隆版Win7.用克隆版的目的是节省安装时间.本作品在采用微软封装部署技术的基础上,结 ...

  4. 深度技术32位Win7系统Ghost版

    深度技术32位Win7系统Ghost版,GhostWin7是指使用Ghost软件做成压缩包的Windows7,俗称克隆版Win7.用克隆版的目的是节省安装时间.本作品在采用微软封装部署技术的基础上,结 ...

  5. 导师互选系统 Alpha版冲刺总结

    导师互选系统 Alpha版冲刺总结 一.设想和目标 我们的软件什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件主要是要实现导师和学生双向互选的功能.功能定义清晰明确,在软 ...

  6. Photoshop Cs5 64位系统破解版下载(内含破解方法)

    Photoshop Cs5 64位系统是电影.视频和多媒体领域的专业人士, 使用 3D 和动画的图形和 Web 设计人员, 以及工程和科学领域的专业人士的理想选择,下面提供Photoshop Cs5  ...

  7. 萝卜家园32位和64位Win7系统Ghost版

    新萝卜家园32位Win7系统Ghost版Sp1,官方旗舰版采用Windows7 SP1简体中文旗舰版32位(MSDN官方发布正式版原版ios镜像)制作,并能够完美自动激活,采用自由天空驱动包,解决部分 ...

  8. Swift - 访问通讯录联系人(使用系统提供的通讯录交互界面)

    1,通讯录访问介绍 通讯录(或叫地址簿,电话簿)是一个数据库,里面储存了联系人的相关信息.要实现访问通讯录有如下两种方式: (1)AddressBook.framework框架 : 没有界面,通过代码 ...

  9. MySQL+PHP配置 Windows系统IIS版

    MySQL+PHP配置 Windows系统IIS版 1.下载 MySQL下载地址:http://dev.mysql.com/downloads/mysql/5.1.html->Windows ( ...

随机推荐

  1. redis五种数据类型的应用

    redis的五种数据类型和使用场景 string类型 string类型多用于缓存 set key value(value可以为json字符串) setnx多用于分布式锁(后面详细整理) 计数器 inc ...

  2. 边缘计算k8s集群之SuperEdge

    什么是边缘计算? 边缘计算,是指在靠近物或数据源头的一侧,采用网络.计算.存储.应用核心能力为一体的开放平台,就近提供最近端服务.其应用程序在边缘侧发起,产生更快的网络服务响应,满足行业在实时业务.应 ...

  3. SpringBoot整合开发

    1.SpringBoot分模块 分模块就是将一个项目分成多个模块,即maven项目. 1)首先创建一个springboot的项目: 第一步:选择springboot的项目 第二步:填写项目的相关信息, ...

  4. 看完就懂--CSS选择器优先级的计算

    CSS选择器优先级的计算 什么是选择器的优先级 优先级的计算与比较(一) - 优先级具有可加性 - 选择器优先级不会超过自身最大数量级 - 同等优先级情况下,后写的覆盖前写的 - 并集选择器之间的优先 ...

  5. GDB调试:从入门到入土

    GDB是类Unix操作糸统下使用命令行调试的调试软件,全名GNU Debugger,在NOI系列竞赛使用的NOI Linux系统中起很大作用(如果不想用毒瘤Guide或直接输出)(XXX为文件名) 1 ...

  6. MongoDB4.2 副本集扫盲说明

    说明: 在扫盲MongoDB相关的一些知识的时候,顺手做下笔记.本文将说明副本集相关的内容.在比较早之前已经对这些有过说明,可以看MongoDB 副本集的原理.搭建.应用.MongoDB中的副本集是一 ...

  7. Java 开发工具

    开发工具·Eclipse 常见开发工具介绍 * A:操作系统自带的记事本软件 * B:高级记事本软件 * C:集成开发环境 IDE     * (Integrated Development Envi ...

  8. 如何快速的插入 100W数据到数据库,使用PreparedStatement 最快实现!

    有时候,我们使用数据库的时候,如何快速的添加测试数据到数据库中,做测试呢,添加100W 数据,如果使用工具的话可能很慢,这里我推荐大家使用 PreparedStatement 预编译 去进行操作:单线 ...

  9. malloc和free解析

    malloc和free都是库函数,调用系统函数sbrk()来分配内存.除了分配可使用的内存以外,还分配了"控制"信息,这有点像内存池常用的手段.并且,分配的内存是连续的. 1. m ...

  10. IPFS挖矿硬盘满了会怎样?

    IPFS是一个互联网协议,对标现在的HTTP.所以,可以想见未来IPFS有多大的价值.所谓IPFS挖矿,是基于IPFS,挖的是filecoin,称其为filecoin挖矿倒是更为贴切.许多初接触IPF ...