目录

奇怪的Vim复制、粘贴操作 (y + p)

Vim寄存器是啥?

咋使用寄存器呢?

终于可以快乐的一次复制多次粘贴了


奇怪的Vim复制、粘贴操作 (y + p)

作为一个Vim “重度患者”,在平常使用idea写代码的时候没有vim模拟器,简直要命。

习惯了一些操作命令后,总想着有没有更简洁的命令可以完成同一个操作。

今天,在编辑文本的时候发现,vim的复制/粘贴(y + p)功能,好像只能复制/粘贴一次。比如说,当你复制一个词 mysql,随后你把这个词粘贴到另一个词 oracle 上,这就把oracle词替换成了mysql这个词。但是,当你想要再 粘贴一次时,按下键位p, 你会发现,粘贴出来的内容是oracle。

这就有点蒙了,我明明复制了mysql啊,怎么粘贴出来就变成了oracle了呢?这vim复制/粘贴是不是有个BUG啊?

不不不,vim到现在还这么多人用,不可能还会出现这样的BUG。我知道,问题出在自己身上。

于是,我开始查资料。我在搜索引擎搜索栏上输入关键字:vim 一次复制 多次粘贴。果然,这压根不是bug,而是我不会使用,不知道vim复制/粘贴的内部实现原理。

中文查找有了一些线索,显示这跟 ”vim 寄存器有关”,于是,我又在搜索引擎重新输入新的关键词:vim registers.

这下,终于搞明白为啥我只能复制/粘贴一次,以及怎么实现一次复制多次粘贴了!

Vim寄存器是啥?

查了资料才发现,原来在平常使用vim的过程中,就一直在使用”寄存器“这玩意儿,只是我们没有意识到它的存在而已。

就拿这次想搞明白的操作”复制/粘贴“来说,我们就是在使用”寄存器“实现的操作。

当我们执行复制(y)命令的时候,被复制的文本内容就被存储到了一个寄存器上(这个寄存器叫:unnamed register "",中文就是:未命名的寄存器 “”)。之后,当我们执行粘贴命令时,就会读取unnamed register里面的内容然后进行粘贴操作。

那寄存器到底是啥? 寄存器是Vim用来存储一些文本或操作细节的内存空间。每个空间都有一个标识符,以便随后可以访问它。

咋使用寄存器呢?

在上面的复制/粘贴操作中,就已经使用了寄存器。只不过是使用的默认的那个,也就是“unnamed register "" "。

当我们想要显示使用某个寄存器时,我们可以使用 双引号后面再跟某个寄存器的名字。比如,"a表示寄存器 a,": 表示寄存器 : 。

那如何获取有哪些寄存器以及它们的名字呢?很简单,使用命令:reg 就可以获得整个寄存器列表;或者你可以带上寄存器的名字,表示查特定的一个或几个寄存器信息,如命令:reg 0 a b,表示获取寄存器0、a、b的信息

如下代码所示:

# 获取整个寄存器列表信息
:reg
Type Name Contentc  ""    editorc  "0    editorl  "1   ...b  "2   ...b  "3    ^J ^J ^Jb  "4   3. ^J7. ^J9. ^J10.
...c  ":   s/powerful/wonderful/ # 获取部分寄存器信息
:reg 0 : "
Type Name Contentc  ""    editorc  "0    editorc  ":   s/powerful/wonderful/

上面列表中的Type一栏,想详细了解的话可以自己去查查资料。这里就不展开。

其实,寄存器在Vim中到处被使用。常见的例子有

  • 在移除文本的时候。比如,使用 x 命令,这个时候,被删除的命令就存在了 unnamed register "" 里面
  • 在使用 “/ 搜索字符 ”搜索文本的时候。搜索字符就被存在 “/” 寄存器中。

至于寄存器的具体使用方法,内容比较多,以后可能会再单独整一篇文章出来。

终于可以快乐的一次复制多次粘贴了

了解了上面的一些前置知识后,我们终于可以愉快的开始使用一次复制多次粘贴操作了。

使用方式是:

  1. 选中你要复制的内容,按下复制命令 y。此时 未命名寄存器 ""名字为0的寄存器 "0 都存下了刚刚复制的内容。
  2. 然会选中你要粘贴的内容,按下粘贴命令 p。注意:此时 未命名寄存器 "" 里面的内容已经变成刚刚粘贴替换掉的内容了。此时,再使用 p,就会直接把 未命名寄存器 "" 里面的内容粘贴出来。
  3. 当你想要继续粘贴复制的内容时,需要使用 名字为0的寄存器。它还保留着刚刚复制的内容。 使用命令 "0p 即可。

不多说了,继续做 Crtl-C / V 工程狮了,噢~不,是 y / p 工程狮……

参考资料:

1. Using Vim Registers

Vim如何一次复制多次粘贴,初次认识Vim寄存器相关推荐

  1. vim命令杂烩(复制粘贴、建文件、撤销等)

    vim 有底线命令,插入,命令方式,在进行复制.撤销等操作时,文件应处于命令方式, 若处于编辑模式,可点击ESC,再进行操作 一.撤销 点击 u , 撤销上一步 二.粘贴 p 三.复制 yy复制游标所 ...

  2. 5.1 vim介绍 5.2-5.3 vim颜色显示和移动光标、vim一般模式下移动光标 5.4 vim 一般模式下复制剪切粘贴...

    2019独角兽企业重金招聘Python工程师标准>>> 5.1 vim介绍 vim 是 vi 的升级版 vim 是带有颜色显示的 mini安装的系统,一般都不带有vim yum in ...

  3. 5.1 vim介绍 5.2 vim颜色显示和移动光标 5.3 vim一般模式下移动光标 5.4 vim一般模式下复制、剪切和粘贴...

    2019独角兽企业重金招聘Python工程师标准>>> 5.1 vim介绍 vim是vi的升级版本 vim是带有颜色显示的 yum install -y vim-enhanced 一 ...

  4. 解决vim与外界的复制粘贴(不用安装插件)

    默认的vim不带系统剪切板与vim的交互的功能: 要完成vim中的内容复制到系统剪切板,需要vim支持 +clipboard: 在终端输入:vim --version | grep clipboard ...

  5. vim可视模式下复制粘贴文本

    [操作步骤] vim编辑器有两种操作模式:普通模式.插入模式.当打开要编辑的文件时,vim编辑器会进入普通模式.在普通模式下按 i 键进入插入模式,在插入模式下按 Esc 键返回普通模式. 在普通模式 ...

  6. vim如何与外界复制粘贴

    导读 在使用 vim 的时候我们会遇到一个问题,在vim之外复制的内容使用p确不能粘贴到vim里面.那么,如何把vim外面复制的内容粘贴到vim里面呢? vim缓存区和系统剪贴板 vim 里面复制粘贴 ...

  7. vim和外界的复制与粘贴

    vim中使用y/p来进行复制粘贴,但是这是在vim文件中使用的,如果我们想要将我们在网页上看的数据粘贴到vim打开的文件中我们该如何操作呢?想要把系统粘贴板的内容复制到vim打开的文件中只需要如下的操 ...

  8. vim选中多行复制粘贴

    vim选中多行复制粘贴 1.按v进入可视模式,移动光标选中需要复制的行: 2.使用y复制选中块到缓冲区(剪切选中块使用d): 3.将光标移动到粘贴的位置,按p即可. 复制多行并粘贴到指定位置后,可能需 ...

  9. linux vim复制粘贴删除,Linux vim删除、复制、粘贴快捷键

    删除 x    小写的x表示向后删除一个字符,也就是删除光标所在字符 nx  n表示数字,表示向后删除每个字符,例如:10x表示删除包括光标在内的后面10个字符 x    大写的x表示删除光标前的一个 ...

最新文章

  1. 《预训练周刊》第15期:Bengio, Lecun, Hinton | 人工智能深度学习、用于图像分类的全局过滤网络...
  2. 使用DWR实现自己主动补全 相似百度搜索框的自己主动显示效果
  3. java验证码实现简单_java实现简单的验证码功能
  4. listen()和accept()函数:让套接字进入监听状态并响应客户端请求
  5. Hyperledger Fabric on SAP Cloud Platform(SAP云平台上的超级账本简介)
  6. SysinternalsSuite工具
  7. 设置随机种子之后,网络训练结果仍然不同的解决方法(针对随机采样的数据集)torch设置随机种子,num_worker对数据采样的影响。
  8. Java之消息摘要之commons codec
  9. 2019级C语言大作业 - HP1的勇者
  10. 拓端tecdat|R语言实现有限混合模型建模分析
  11. 乌鲁木齐高新区大数据产业首个惠农项目落地
  12. PDF怎么打印?为什么有时选择打印没有反应?
  13. Openlayer 切换鼠标样式
  14. 首份财报营收增长扭亏为盈,为何怪兽充电的出路依旧“迷雾重重”
  15. 其实装修也是工程管理
  16. 【matplotlib】绘制简单二维、三维图像
  17. 2. 输出2~100之间的素数
  18. 电子产品销售数据分析
  19. 线程休眠 java_Java线程休眠和线程让步
  20. java 怎么判断1_1.0_1.00是同一个数_编程练习-判断是否为易混淆数

热门文章

  1. 【STM32/GD32】 如何用Keil uVision生成bin格式文件
  2. Transporter上传ipa 卡在正在验证 App - 正在通过App Store进行认证
  3. 智慧树python程序设计基础课后答案_智慧树Python程序设计基础答案完整
  4. redis订阅怎么退出_Coroutine\Redis 订阅模式 调用退订无效果
  5. 如何在VirtualBox中利用共享文件来实现文件共享
  6. 数据结构:线性结构和非线性结构的区分
  7. 几年时间,我才真正学会学习
  8. 50个高端大气上档次的管理后台界面模板(转)
  9. Charles(茶壶)的使用
  10. 运动蓝牙耳机哪款性能好?2020最受欢迎五款蓝牙耳机测评