VIM编辑器的宏操作
这两天看到一个小练习,要求如下:
在GVIM下,将下面这张图的内容
改成下面这样
并且指出,要用批量操作的方式,不能一行一行的键入
其实第一反应是利用正则表达式来操作,但是让用正则表达式以外的操作方式,查了不少方法,最终发现了VIM的宏,觉得挺有意思的,特地记录一下
宏的基本操作
宏是用来重复执行一组操作的
操作方式为
1、在普通模式下,按
q
开启宏操作方式2、随后输入一个宏名作为寄存器,为了方便,可以输入一个小写字母,但不要用大写字母哟
3、输入要批量操作的内容,VIM会将此时所有的操作记录在寄存器中
4、操作完成后,再次在普通模式下按
q
结束宏记录5、之后可以调用宏操作,调用方式有两种,一种是在普通模式下按
@宏名
,另一种方式是在命令模式下输入normal @宏名
下面一步步演示
先是在普通模式下依次按下
q
和a
,其中a
是我们的宏名
完成这一步可以看到在VIM窗口的左下角出现了记录中
字样,表明随后的操作都将记录在VIM的宏中
随后,我们按下i
进入输入模式,并输入
number <回车>
按Esc
退出输入模式,再按q
,退出宏操作
此时便完成了宏记录操作,记录完宏操作后是这样的
接下来分别用两种方式调用宏
普通模式下,直接输入@a
可以看到多出了一行内容,用命令行方式调用
在命令行输入
:normal @a
可以看到,再次输入了一行内容
如果想知道宏名中有哪些操作,可以在命令模式下输入
:register @a
可以看到刚才记录在宏名a
中操作全部展示出来了
为什么不建议宏名用大写字母
我们新建一个VIM文本,按照同样的方式操作一下,只是将宏名由a
换成A
我们先来查看一下宏名A
中的内容
可以看到,宏中并没有任何操作,大写字母的作用是在现有宏中添加操作的
对一个现有的宏,如果我们想修改里面的操作,如果我们按照
q
a
<一系列操作>
q
这个方式操作只会覆盖掉原有的宏,并不会在原有宏的基础上增加操作
接下我们试试在最初的宏a
中加上is 0
,用a
进入和A
进入分别会发生什么
#方式1
q
a
输入 is 0
q
可以看到,执行宏操作后,只打印出is 0
,再来看看此时宏a
中的内容
可以看到此时的宏中只有is 0
先将宏改回原来的样子,再来换一种方式试试
#方式2
q
A
输入 is 0
q
可以看到此时调用宏时,不仅有打印出了number
也打印出了is 0
,最后再看看这种方式更改后宏a
中记录的操作
宏中设置变量
有时我们会用到变量,而宏中也可以设定变量,操作方式如下
在进入宏记录后,在命令行输入
:let i = 1 <回车>
按 i 进入输入模式
按Ctrl r = 三个按键
在输入变量名 i 即可插入变量
我们按照这个步骤试一下,过程如下
q
b
:let i = 1 <回车>
进入输入模式,并输入Ctrl r = i <回车>
退出输入模式,并结束宏记录
普通模式下按下 @b
不过有一点要说明,在一个VIM文本中,所有的变量是共同有的,我们对宏a
进行一个更改
在宏a后面加上
value Ctrl r = i <回车>
可以看到在宏b
中设置的变量在宏a
中依旧可以调用
如果我们对变量 i
不断进行累加,可以在宏a
中加入let i = i + 1
此时,我们也可以在其他宏中更改变量i
,比如我们新建一个宏,如下:
q
c
在命令行输入
:let i = 10 <回车>
q
普通模式下输入 @a
可以看到此时i
的值是10
,我们再次在普通模式下按@a
可以看到此时是在10
的基础上进行累加的
如果,我们再新建一个宏,更改变量i
的变化方式呢,就像下面这样
q
m
命令行输入 :let i = i + 50 <回车>
q
普通模式下按 @a
可以看到只有第一次调用宏时是按照宏m
的设定变化的,但随后又按照宏a
的设定变化
下面给出最初的小练习的解决方案
/* 在宏中设置变量 */
q
a
:let i = 1 <回车>
:let j = 2 <回车>
q
/* 在宏中键入内容 */
q
a
i
number 组合键 i + number 1 = number 组合键 j <回车>
ESC
:let i = i + 1 <回车>
:let j = j + 1 <回车>
q
/* 打印 */
普通模式下输入 20@a
其实利用正则表达式的方式也是能够实现的,正则表达的方式下次贴出来
VIM编辑器的宏操作的更多相关文章
- vim 编辑器的光标操作
vim中最简单的移动光标的方式是使用使用方向键操作,但这种方式的效率底下,更高效的方式是使用快捷键,常用的快捷键如下表所示. 快捷键 功 ...
- 1201.1——Vim编辑器的相关操作
一 vi的操作模式 vi提供两种操作模式:输入模式(insert mode)和指令模式(command mode).在输入模式下,用户可输入文本资料.在指令模式下,可进行删除.修改等各种编辑动作. 在 ...
- Linux中vim编辑器常用操作技巧
Normal 0 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {mso-styl ...
- 【Linux学习】Vi / Vim编辑器—编辑器工作模式、vi编辑操作
Vi / Vim编辑器-编辑器工作模式.vi编辑操作 推荐一个很好的学习指南:http://www.oschina.net/translate/learn-vim-progressively 一.编辑 ...
- vim编辑器操作①
Linux文本编辑器: 行编辑器:sed 全屏编辑器:nano,vi/vim 本文主要介绍说明vim编辑器的相关使用: 其有三种模式,即: 编辑模式(默认模式).插入模式(输入模式).末行模式(内置的 ...
- vi/vim编辑器操作梳理
1. vi/vim编辑器详细使用讲解 1.1 vi/vim编辑器的3种模式 1.2 vi/vim编辑器操作说明 参数/命令/模式 说明 ###普通模式 :set nu 显示行号 :set non ...
- vim编辑器中撤销和恢复操作
在VIM编辑器下切换至命令行模式: 撤销: u 恢复: ctrl + r
- vim 编辑器的设置
vi编辑器的配置:http://blog.mcuol.com/User/fenghua/Article/17411_1.htm ******************************vim ~/ ...
- vim编辑器学习
vim是一个非常强大的编辑器,看了很多文章能感受到它的强大,不过还需要不断地学习和使用来慢慢感受. 安装vim 在ubuntu 系统中使用 sudo apt-get install vim-gtk 安 ...
随机推荐
- Maven install没有将jar包加载到本地仓库
错误描述 使用mvn install:install-file -Dfile=ojdbc8-19.3.0.0.jar -DgroupId=com.oracle -DartifactId=ojdbc8 ...
- 用户与安全 -(1)Linux用户及组管理
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 前言 Linux 是多用户多任务操作系统,换句话说,Linux 系统支持多个用户在同一时间内登 ...
- CentOS开机流程详解
一个执着于技术的公众号 开机流程 BIOS: (Basic Input Output System)基本输入输出系统,它是一组固化到计算机内主板上一个ROM芯片上的程序,保存着计算机最重要的基本输入输 ...
- 老生常谈系列之Aop--CGLIB动态代理的底层实现原理
老生常谈系列之Aop--CGLIB动态代理的底层实现原理 前言 上一篇老生常谈系列之Aop--JDK动态代理的底层实现原理简单讲解了JDK动态代理的实现,动态代理常用实现里面的双子星还有另一位--CG ...
- Dapr学习(2)之Rancher2.63(k8s&k3s)环境安装Dapr
前言:前面写过一篇关于dapr入门安装的文章,self-host模式,使用docker安装的本地调试环境,并进行了测试:本篇介绍k8s方式安装dapr,此文主要基于的环境是k3s,通过rancher2 ...
- unity---角色控制器控制角色移动
获取对象 public CharacterController cc; cc=gameObject.GetComponent<CharacterController>(); if(Inpu ...
- vue新手入门之使用vue框架搭建用户登录注册案例,手动搭建webpack+Vue项目(附源码,图文详解,亲测有效)
前言 本篇随笔主要写了手动搭建一个webpack+Vue项目,掌握相关loader的安装与使用,包括css-loader.style-loader.vue-loader.url-loader.sass ...
- MySQL、SqlServer、Oracle,这三种数据库的优缺点,你知道吗?
盘点MySQL.SqlServer.Oracle 三种数据库优缺点 MySQL SqlServer Oracle 一.MySQL 优 点 体积小.速度快.总体拥有成本低,开源:支持多种操作系统:是开源 ...
- PHP odbc查询SQL SERVER数据库带有中文时无返回数据
近日遇到一个小麻烦当数据库中有中文字符数据 结果odbc_fetch_array后 我用json_encode怎么也得不到数据页面一片空白 我脑子也一片空白后来才知道sqlserver 没有 UTF- ...
- 钉钉登录二维码嵌套在vue页面中
转自 https://www.csdn.net/tags/OtDacg3sMjQ2NTgtYmxvZwO0O0OO0O0O.html 钉钉登录二维码嵌套在vue页面中 2021-09-04 14:42 ...