Linux CentOS7 vim寄存器

计算机中通常所说的寄存器Register一般指的是CPU中的寄存器,用来暂存CPU处理所需要的指令、数据等。

vim中同样也有寄存器,使用的方式和CPU非常类似。

vim中的寄存器(register)作用和windows中的剪切板类似,不过vim中的寄存器不止一个,有不同的类别,有不同的用处。

vim的寄存器是一组用于保存文本的简单容器。它们既可像剪贴板那样,剪切、复制和粘贴文本;也可以记录一系列按键操作,把它们录制成宏。

vim常规使用系统剪贴板进行剪切、复制与粘贴操作,如果再运用寄存器手段,将为删除、复制与粘贴等操作提供更多选择,而更具灵活性,同时也提高了编辑文本效率。

一、认识寄存器        

vim的寄存器可以看成vim中额外用来存储信息的区域,虽然看不见,但是如果使用x、s、y、p等命令,都无意识地使用了vim的寄存器。

你可能已经在复制或删除文本并用p或P粘贴它们到别处的时候使用过Vim的寄存器了。但是,你知道Vim总共有10种不同类型的寄存器吗?如果正确地使用Vim寄存器,将帮助您从重复的输入中解放出来。

总的来说,寄存器就是一个可自定义的多重剪切板,超级剪切板。

1.寄存器分类

vim所拥有的10种寄存器类型:

  1. 匿名寄存器("")
  2. 编号寄存器("0-9)
  3. 小删除寄存器("-)
  4. 命名寄存器("a-z)
  5. 只读寄存器(":,".,"%)
  6. Buffer交替文件寄存器("#)
  7. 表达式寄存器("=)
  8. 选取和拖放寄存器("*,"+)
  9. 黑洞寄存器("_)
  10. 搜索模式寄存器("/)

2.寄存器作用与功能

常用的有匿名寄存器("")和命名寄存器("a-z)。

匿名寄存器("")

匿名寄存器,又常称为无名寄存器,是vim默认的寄存器,复制、删除、修改等操作的内容都会保存在该寄存器中。

倘若没有指定要使用的寄存器,vim将缺省使用无名寄存器,它可以用双引号表示。为了显式地引用该寄存器,需要使用两个双引号。例如,""p,它完全等同于p命令。x、s、d、c与y命令(以及它们对应的大写命令)都会覆盖无名寄存器中的内容。无论哪一种情况,都可以通过加"{register}前缀来指定另外一个寄存器,但无名寄存器总是缺省的。事实上,无名寄存器的内容很容易被覆盖,不小心会导致问题发生。

命名寄存器("a-z)

命名寄存器使用字母a-z来命名。a-z命名寄存器可以存储复制的、修改的、和被删除的文本。用户需要显示地告诉vim要使用的命名寄存器。

追加文本:使用大写版本的命名寄存器来向原来的命名寄存器中追加文本。

复制专用寄存器("0)

就是使用y命令复制的内容都会存放到这个寄存器中。

缓存最近操作内容,复制与删除有别。

黑洞寄存器("_)

顾名思义,这个寄存器的功能和/dev/null设备非常地相似,就是将一切输入其中的东西都吞噬掉。我们常用x命令来删除某个字符,用dd命令来删除某行,其实这些都不是删除,是剪切,真正的删除应该是这些命令:

        "_dd   //删除某行

        "_x    //删除光标下的字符

文件名寄存器("%)

"%代表的是文件名寄存器,存放的是当前正在编辑的文件名

二、引用寄存器

我们重点讨论无名寄存器的命名、使用等操作。

本文中提到的d命令,y命令,c命令指的是和这个操作符相关联的命令集合,比如和y操作符相关联的一些命令如下:

        yy //复制当前行

        yw //当前光标下面的这个单词

        yit //复制一个html标签中的内容

        yft //复制当前行上光标到第一个t之间的所有内容

        yiw //复制一个单词的内容(yank in word)

vim的删除、复制与粘贴命令都会用到众多寄存器中的某一个。可以通过给命令加"{register}前缀的方式指定要用的寄存器。若不指明,vim将缺省使用无名寄存器。

1.在普通模式中使用寄存器

如果想把当前单词复制到寄存器a中,可执行"ayiw,或者,可以用"bdd,把当前整行文本剪切至寄存器b中。在此之后,既可以输入"ap粘贴来自寄存器a的单词,也可使用"bp命令粘贴来自寄存器b的一整行文本,两者互不干扰。

比如,%代表的是文件名寄存器,存放的是当前正在编辑的文件名,我们现在打开一个文件demo.txt,处于普通模式,此时输入以下内容:

        "%p

//表示将文件名寄存器的内容粘贴到当前行

文件内容就变成这个样子了:

2.在底行模式中使用寄存器

除了普通模式的命令外,vim也提供用于删除、复制与粘贴操作的Ex命令(底行模式下)。例如,可以执行:delete c,把当前行剪切到寄存器c,然后再执行:put c命令将其粘贴至当前光标所在行之下。

delete命令可以简写为d。

执行d b命令,删除当前行,内容存入b寄存器中

执行nd d命令,删除第n行,内容存入d寄存器中。

如下图,n=8

执行粘贴命令时,不能把put简写为p,会报错。

执行put d命令时,将在当前行后粘贴d寄存器中的内容。

执行nput d命令时,将在第n行后粘贴d寄存器中的内容。

如下图,n=3

一个很酷的技巧是将黑洞寄存器("_)传给:put命令。因为黑洞寄存器不保存任何值,:put _命令将插入一个新的空白行。您可将这个与全局命令联合起来,插入多个空行。

3.在编辑模式中使用寄存器

在编辑模式,当我们按下ctrl+r键,再加上相应的寄存器的名字,就可以插入寄存器中的内容了。

在编辑模式下,一般用的最多的是选择内容,用ctrl+insert复制,用shift+insert粘贴。

4. 在可视模式中使用寄存器

在可视模式下,一般用的最多的是无名寄存器。选择内容后,录入y命令进行复制,录入d命令删除内容。

三、查看寄存器

查看寄存器里面缓存的内容,可以使用多个命令,如dis,registers,register,reg等。

        :reg [寄存器名称]

        :reg      # 查看当前所有寄存器

        :reg a b c      # 查看命名寄存器

四、删除寄存器

从技术上来说,我们没有必要来清除任何寄存器,因为你下一个使用来存储文本的寄存器会自动覆盖该寄存器中之前的内容。

如果想清除寄存器中的内容,可以使用表达式:let @a=''来将寄存器"a的值设为空的字符串。

寄存器的生命周期是很长的,即使服务器重启什么的,只要能正常进入系统,寄存器里的内容都是一直存在的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/149601.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汽车驾驶 - 四梁六柱是什么

汽车的四梁六柱指的是车辆的两个前纵梁,两个后纵梁和ABC柱。虽然不像车辆上的发动机变速箱这些部件出镜率那么高,但这几个部位的重要作用可一点都不含糊。一辆车在碰撞时能够受力起到保护左右的就是四梁六柱,对我们汽车的安全性起到至关重要的…

二叉树经典OJ题

二叉树的层序遍历 1.题目2.图文分析3.代码演示 1.题目 2.图文分析 3.代码演示

Spring框架数据访问

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

java Spring Boot在配置文件中关闭热部署

之前更大家一起搭建了一个热部署的开发环境 但是 大家要清楚一个情况 我们线上程序运行突然内部发生变化这是不可能的。 所以 他就只会对我们开发环境有效 是否开启 我们可以通过 application配置文件来完成 我这里是yml格式的 参考代码如下 spring:devtools:restart:enabled…

Flow Chart 的中文意思是什么?请说出自然界中河流的三种流动方式。事件驱动是什么?

目录 Flow Chart 的中文意思是什么? 请说出自然界中河流的三种流动方式。 事件驱动是什么? 请介绍一下 亚特兰大这座城市 Flow Chart 的中文意思是什么? 流程图 请说出自然界中河流的三种流动方式。 自然界中的河流可以以多种不同的方式流动,以下是其中三…

理解C++强制类型转换

理解C强制类型转换 文章目录 理解C强制类型转换理解C强制转换运算符1 static_cast1.1. static_cast用于内置数据类型之间的转换1.2 用于指针之间的转换 2. const_cast2.1示例12.2 示例2————this指针 3.reinterpret_cast4.dynamic_cast C认为C风格的类型转换过于松散&#x…

【RabbitMQ 实战】08 集群原理剖析

上一节,我们用docker-compose搭建了一个RabbitMQ集群,这一节我们来分析一下集群的原理 一、基础概念 1.1 元数据 前面我们有介绍到 RabbitMQ 内部有各种基础构件,包括队列、交换器、绑定、虚拟主机等,他们组成了 AMQP 协议消息…

【GSEP202303 C++]】1级 每月天数

[GSEP202303 一级] 每月天数 题目描述 小明刚刚学习了每月有多少天,以及如何判断平年和闰年,想到可以使用编程方法求出给定的月份有多少天。你能做到吗? 输入格式 输入一行,包含两个整数,分别表示一个日期的年、月…

检测文件目录及其子文件到底的代码-实现可展开的目录列表和文件浏览功能的HTML代码

此实现了一个可展开的目录列表和文件浏览功能 该代码通过PHP实现了扫描指定目录下的文件和目录,并按照一定的排序规则进行展示。 用户可以点击目录名称,展开或折叠该目录下的子目录和文件列表。 对于文件,显示了文件名、修改时间和文件大小,并提供了文件链接以在新标签页…

uni-app 经验分享,从入门到离职(实战篇)——模拟从后台获取图片路径数据后授权相册以及保存图片

文章目录 📋前言⏬关于专栏 🎯需求描述🎯前置知识点🧩uni.showLoading()🧩uni.authorize()🧩uni.downloadFile()🧩uni.saveImageToPhotosAlbum() 🎯演示代码🧩关于图片接…

一文了解硬盘AFR年化故障率评估方式和预测方案

目前常用评价硬盘(或者其他硬件产品)有一个关键的指标就是年化故障率(AFR)。年化故障率(AFR)是一种衡量产品可靠性的指标,表示在一年内产品发生故障的概率。 除了年化故障率(AFR&…

Go Gin Gorm Casbin权限管理实现 - 2. 使用Gorm存储Casbin权限配置以及`增删改查`

文章目录 0. 背景1. 准备工作2. 权限配置以及增删改查2.1 策略和组使用规范2.2 用户以及组关系的增删改查2.2.1 获取所有用户以及关联的角色2.2.2 角色组中添加用户2.2.3 角色组中删除用户 2.3 角色组权限的增删改查2.3.1 获取所有角色组权限2.3.2 创建角色组权限2.3.3 修改角色…

API基础————包

什么是包,package实际上就是一个文件夹,便于程序员更好的管理维护自己的代码。它可以使得一个项目结构更加清晰明了。 Java也有20年历史了,这么多年有这么多程序员写了无数行代码,其中有大量重复的,为了更加便捷省时地…

【伪彩色图像处理】将灰度图像转换为彩色图像研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

选择适合户外篷房企业的企业云盘解决方案

“户外篷房企业用什么企业云盘好?Zoho WorkDrive企业网盘可以帮助户外篷房企业实现文档统一管理、提高工作效率、加强团队协作,并且支持各种文件类型的预览和编辑。” S公司是一家注重管理规范的大型户外篷房企业,已经有10余年的经验。作为设…

XSS CSRF

XSS & CSRF xss:跨站脚本攻击:注入一些非法的脚本 csrf:冒充身份 XSS 反射型 /welcome:res.send(req.query.type) 输入什么就输出什么(httpOnly:false,但不是解决方案) 比如:?&…

壁炉装饰:突破传统的创新趋势

壁炉,一直以来都是家庭温馨的象征,但它也是家居装饰中一个充满潜力的元素。如今,随着设计趋势的不断演变,壁炉装饰已经迈入了一个全新的时代,融合了美学、功能和可持续性,为家庭创造了更多可能性。 壁炉装饰…

openGauss学习笔记-91 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用MOT外部支持工具

文章目录 openGauss学习笔记-91 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用MOT外部支持工具91.1 gs_ctl(全量和增量)91.2 gs_basebackup91.3 gs_dump91.4 gs_restore openGauss学习笔记-91 openGauss 数据库管理-内存优化表MOT…

按键精灵调用大漠插件源码例子

源码名称:按键精灵调用大漠插件例子源码完整备注 源码名称:按键精灵调用大漠插件例子源码完整备注 蓝奏下载:https://wwi.lanzoup.com/iuffr0riiowf 飞书网盘:Docs

UG\NX二次开发 判断特征是否被抑制 UF_MODL_ask_suppress_feature

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 今日订阅 感谢 weixin_40668746 订阅本专栏,非常感谢。 简介 UG\NX二次开发 判断特征是否被抑制 UF_MODL_ask_suppress_feature. 函数说明 效果 可以…