首页 > 其他分享 >vim 键盘宏操作 -- 大道至简

vim 键盘宏操作 -- 大道至简

时间:2022-11-04 11:32:17浏览次数:45  
标签:baidu www 大道至简 -- vim https 寄存器 pdf com


最近利用vim做一些文本处理时 发现vim 支持的键盘宏是一个好东西啊,高效优雅得处理大量需要重复性操作的文本,让人爱不释手!!!

希望接下来对键盘宏的分享能够实际帮助到大家。

后文中描述的一些vim操作会汇集成指令字符串,方便大家参考。

1. 场景描述

在分享键盘宏之前,先看这样一个文本操作需求:

对如下文本增加markdown中的链接形态,并为每一个行增加一个递增的序号。

markdown的链接语法 是: [description](https://www.baidu.com)

HashKV.pdf
Compaction management in dis-tributed key-value datastores.pdf
Dostoevsky.pdf
LSM-trie.pdf
NoFTL-KV.pdf
WB-tree.pdf
Accordion.pdf
Thonangi and Yang.pdf
FD-tree.pdf
ElasticBF.pdf
LSbM-tree.pdf
VT-tree.pdf

完成操作之后的形态应该如下,这样我们就能在markdown语法中点击文字,跳转到指定的链接中了:

[1. HashKV.pdf](https://www.baidu.com)
[2. Compaction management in dis-tributed key-value datastores.pdf](https://www.baidu.com)
[3. Dostoevsky.pdf](https://www.baidu.com)
[4. LSM-trie.pdf](https://www.baidu.com)
[5. NoFTL-KV.pdf](https://www.baidu.com)
[6. WB-tree.pdf](https://www.baidu.com)
[7. Accordion.pdf](https://www.baidu.com)
[8. Thonangi and Yang.pdf](https://www.baidu.com)
[9. FD-tree.pdf](https://www.baidu.com)
[10. ElasticBF.pdf](https://www.baidu.com)
[11. LSbM-tree.pdf](https://www.baidu.com)
[12. VT-tree.pdf](https://www.baidu.com)

假想,我们想要完成类似功能的操作,需要处理的文本成千上万行,这个时候我们需要用传统的方法去操作会把人逼疯。

而在vim的键盘宏中,这仅仅只是一系列指令操作的集合,并不会消耗太多的精力。

详细视频见:

vim 键盘宏操作 -- 大道至简_vim

整个过程可谓非常简单,迅捷。只要在第一行录制一遍键盘宏,就能够应用在所有的行上。

2. 键盘宏概述

  • vim 寄存器:vim提供了一系列寄存器,有一些是不允许修改的,而有一些可以由用户去修改写入​​a-z​​和​​A-Z​​。总的作用就类似CPU的寄存器一样,用来临时保存数据而已。
    可以通过:
:reg a # 查看寄存器a的内容

键盘宏就是创建一个寄存器,将我们针对文本的操作指令记录到寄存器中,再将寄存器的内容应用到其他的文本行中。

  • 录制键盘宏的寄存器操作
一般模式 -- qa #录制以a命名的寄存器,按一次q表示开始录制
一般模式 -- do some op # 做一些操作:我们针对文本的操作
一般模式 -- q # 按第二次q 表示结束录制,两个q之间的文本操作已经保存到寄存器之中了
:reg a # 可以看到刚才录制的寄存器 a 的内容
  • 变量赋值
:let i=1
:let str="https://www.baidu.com"
  • 变量取值
插入模式 -- ^r=i # ctrl-r-=-i 会在当前插入位置添加i的值
  • 改变变量的值
:let i+=1
  • 多行批量操作
1. 可视化操作选中除了操作的第一行之外的所有行
2. :normal @a #将寄存器内容应用在选中的多行中

3. 案例的详细操作步骤

1. :let i=1 #初始化变量i 的值,作为行编号使用
2. :let str='https://www.baidu.com' # 初始化变量str,作为链接字符串使用
3. qa # 开始录制键盘宏
4. I[^r=i. A](^r=str):let i+=1 # 操作内容,按照字母大小写顺序以及字符敲就可以了
5. q
6. v 可视化操作选中剩余的所有行
7. :normal @a # 对选中的行执行寄存器内的所有操作

关于第四步的寄存器操作内容如下:

vim 键盘宏操作 -- 大道至简_寄存器_02

学习起来有点麻烦,当多次操作熟悉之后就会发现这一些学习时间相比于成千上万行的重复操作来说简直是大道至简,也让我们更加深刻得体会到vim的神级编辑器并不是浪得虚名。


标签:baidu,www,大道至简,--,vim,https,寄存器,pdf,com
From: https://blog.51cto.com/u_13456560/5823178

相关文章

  • 存储引擎 K/V 分离下的index回写问题
    前言近期在做onnvmehash引擎相关的事情,对于非全序的数据集的存储需求,相比于我们传统的LSM或者B-tree的数据结构来说能够减少很多维护全序上的计算/存储资源。当然我们要......
  • C++智能指针:weak_ptr实现详解
    文章目录​​weak_ptr描述​​​​声明​​​​作用​​​​原理实现​​​​函数成员使用​​​​总结​​weak_ptr描述声明头文件:​​<memory>​​​模版类:​​template......
  • Rocksdb 的内存分配器--ConcurrentArena 实现原理
    文章目录​​RocksdbConcurrentArena实现原理​​​​基本架构​​​​内存分配过程​​​​内存释放过程​​​​ConcurrentArena分配器和其他内存分配器区别和联系​......
  • Rocksdb 日志分析工具 -- 性能和稳定性分析
    文章目录​​1.前言​​​​2.工具使用细节​​​​3.如何制作一个自己的python-package​​​​3.1项目配置文件​​​​3.1.1LICENSE文件​​​​3.2README.md文......
  • WCNSS_qcom_cfg.ini WIFI配置文件解析
    STA相关的一般配置gChannelBondingMode5GHz=1gChannelBondingMode24GHz=0//通道绑定gStaKeepAlivePeriod=30//使用非零周期值启用保持活动状态gVhtMpduLen=2......
  • 蚂蚁集团绿色大赛---赛队招募啦!!
    2022年度大赛——蚂蚁集团绿色计算大赛,正式开赛!蚂蚁集团联合绿色计算产业联盟,面向广大学生和科技从业者发起实战精英挑战赛!规模宏大、阵容豪华、百万奖池、在线挑战,诚邀......
  • Python内置模块FTPLIb的 STORLINES方法运行出错解决过程
    FTPLIbSTORLINES方法出错解决过程错误现象importftplibimportoptparseimportsysclassFTPWebpageDetect:def__init__(self)->None:self.target......
  • ArcGIS JS API 添加要素图层 点击时获取图层属性
    //需要引入:"esri/layers/FeatureLayer"模块//要素图层被点击时弹出图层属性的模板定义{为字段}varTuCeng03TC={"title":"ID:{objectid}",......
  • curl 获取响应的状态码
    需要在执行curl_exec后再通过curl_getinfo来获取。$ch=curl_init();curl_setopt($ch,CURLOPT_URL,'http://www.google.com.hk');curl_setopt($ch,CURLOPT_TIMEOUT......
  • redis 集群重启两种方式
    关闭集群:redis-cli-c-h192.168.10.137-p7000shutdown  redis-cli-c-h192.168.10.137-p7001shutdown  redis-cli-c-h192.168.10.137-p7002shutdo......