Vim编辑器和剪贴板进行内容的拷贝和粘贴

最近在使用Vim,由于不熟练使用,在拷贝剪贴板的内容到Vim或者拷贝Vim编辑器里面的内容到剪贴板时,p 命令和 y命令 不好用,忍受不了,看了几个帖子,不管用,后来找到了解决办法记录一下

Vim编辑器和剪贴板进行内容的拷贝和粘贴

  1. 首先根据平台不同,要分两种情况。先用下面命令确定你属于哪一种: 在ububtu窗口中输入命令查看:
vim --version | grep clipboard

如下图所示:
在这里插入图片描述

情况1:
如果结果里你找到加号开头的+clipboard, 那么vim没问题。
在这里插入图片描述

用"+y 代替y将选中的内容复制到系统剪贴板,效果和ctrl-c一致。
用"+p代替p将剪贴板内容复制到指定位置,也可以用ctrl-v。
d,x,c,s也一样,用之前前面加"+。

如果用y直接把内容复制到系统剪贴板,需要到vim配置文件.vimrc里加一行属性。用下面命令开始配置,

vim ~/.vimrc

在这里插入图片描述

然后,加入下面这行,

set clipboard=unnamed

在这里插入图片描述

现在你的y,d,x,p已经能和 ctrl-c和ctrl-v 一个效果,并且能互相混用。

情况2:
如果找到的是负号开头的-clipboard,说明你的vim不支持系统剪切板,需要先重新安装vim

sudo apt install vim-gtk

在这里插入图片描述
安装完成之后使用命令查看一下Vim:

vim --version | grep clipboard

发现已经是+clipboard,如下图所示
在这里插入图片描述
这时候进行情况1的配置:

用"+y 代替y将选中的内容复制到系统剪贴板,效果和ctrl-c一致。
用"+p代替p将剪贴板内容复制到指定位置,也可以用ctrl-v。
d,x,c,s也一样,用之前前面加"+。

如果用y直接把内容复制到系统剪贴板,需要到vim配置文件.vimrc里加一行属性。用下面命令开始配置,

vim ~/.vimrc

在这里插入图片描述

然后,加入下面这行,

set clipboard=unnamed

在这里插入图片描述

现在你的y,d,x,p已经能和 ctrl-c和ctrl-v 一个效果,并且能互相混用。

测试:
这时候剪贴板拷贝文字,在命令模式下使用+p即可粘贴剪贴板的内容,同样使用+y可以复制
在这里插入图片描述

  1. Vim拓展:

首先,vim里y,d,x,c复制,剪切下来的内容临时存放在一个叫vim寄存器(Register)的地方。而且寄存器有好几个。下面vim命令可以看到寄存器列表,

:reg

最常用的默认寄存器""叫 未命名寄存器(unnamed register)。最近一次删除,修改,复制内容统统暂存这里(会覆盖,只保留最近一次任意操作)。感兴趣的同学可以看下表,其他寄存器都是干什么的。

""      // 默认unnamed寄存器,最近一次"d","c","s","x","y"复制,删除,修改内容

"0      // 最近一次"y"复制内容

"1      // 最近一次"d","c","s","x"删除,修改内容
"2     //  上一次"d","c","s","x"删除,修改内容
"3     // 上上次"d","c","s","x"删除,修改内容
...     
"9      // [1-9]数字以此类推


"a     // 字母寄存器,供用户指定使用,比如"ay就是复制到"a寄存器
"b
...
"z


"-      // 少于一行的"d","c","x"删除内容

".      // 只读寄存器
":      // 只读寄存器
"%     // 只读寄存器
"#     // 只读寄存器

"+      // 映射系统剪贴板 (有的默认设置不支持)
"*      // 映射系统剪贴板 (有的默认设置不支持)

而ctrl-c以及ctrl-v用到的是系统剪贴板(system clipboard)。vim寄存器和系统剪贴板不是一个东西。顾名思义,vim寄存器的数据作用域仅限于vim本地,甚至如果开多个vim窗口,每个窗口都有一套自己完整的寄存器,互相不影响。而系统剪贴板作为系统级别的全局变量,两边当然不能混用。

所以vim专门提供了"+寄存器作为对系统剪贴板的映射。可以理解成自动把"+寄存器的内容再复制一份到系统剪贴板,前提是你得把clipboard属性设置成打开。有些版本(比如MacOS自带的vim)就不支持这个映射。重装vim就是为了打开这个开关。(如果有简便的直接改设置方法,请纠正我)。打开以后用"+y命令把内容复制到和系统剪贴板关联的寄存器"+上。而y只是复制到默认无名寄存器""上。

最后set clipboard=unnamed就是把默认无名寄存器"" 和系统剪贴板也关联上。 就是用y也可以备份到系统剪贴板。缺点是破坏了默认寄存器"“的本地性。因为p操作也会被等同于”+p处理,粘贴的是"+寄存器的内容, 粘贴的时候""默认寄存器内容就会被覆盖。 表现出来的就是复制一次,到任意vim窗口都可以粘贴。但这个特性恰恰是很多人想要的。

还有个细节,大部分系统上"+和"*是等价的。但在有的系统上不等价,比如Linux,

“+:对应ctrl-c和ctrl-v用到的系统剪贴板:desktop clipboard
“*:对应图形界面中鼠标框选的内容(可以用鼠标中键黏贴)
所以看到”*也不要慌,试试看用”*y和"*p能不能复制粘贴。可以的话就说明是混用的,不行就没办法,使用"+。

Vim使用快捷键快速预览:
在这里插入图片描述

参考文档《https://www.zhihu.com/question/19863631》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值