vim 基础学习之替换
替换命令substitute可以用来查找跟替换操作。
:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
range-命令作用范围(缺省的情况下,默认是当前行)
substitute-替换命令
pattern-正则表达式,想要替换的内容(如果为空,会引用上次的查找结果,类似于global中的pattern)
当然,如果我们非要想显示的使用上一个pattern,那我们可以使用<C-r>/,就会把上次的结果插入到命令行了。
substitute命令的使用,正式分两步,首先是写查找模式,然后是替换资源
string-要替换的内容
flags-命令标志位(g-每行所有匹配项都替换;c-替换的时候提示;e-屏蔽未搜索到错误信息)
这里我们简单说一下关于c提示。当我们选择这个替换标志位的时候,每要替换一个匹配项的时候,我们系统就是提示我们是否替换,主要有以下选择
.y-替换
.n-不替换
.q-退出替换
.l(lastA)-匹配完当前项以后退出
.a(all)-替换此处跟以后的所有匹配项
.<C-e>-向上滚动屏幕
.<C-y>-向下滚动屏幕
count-执行次数
例子如下
aaabbbccc
aaadddeee
bbbdddccc
abcdefghi
adbbbcdefaaf
特殊字符
\r-插入一个换行符
例如,你执行如下的命令
:,12s/aaa/\r/g
上面的结果就会变为
bbbccc dddeee
也就是aaa变为了换行符
\t-插入一个制表符
\\-插入一个反斜杠
\-插入第一个子匹配(可以类推到9)
\(&)-插入匹配所有内容
~-使用上次调用substitute时候的替换string
\={vim script}-执行{vim script}表达式,并将返回结果作为替换string
假如有下面这种情况,我们想要把
afafafdafdeifahgf fafqedoafeiafaf
aaaaa
上面的aaaaa 替换成afafafdafdeifahgf,那我们要怎么办呢?这时候手动输入afafafdafdeifahgf可定很麻烦,而且还容易输错。这时候我们就可以使用寄存器来引用这个afafafdafdeifahgf
方法如下
.%s/aaaaa/<C-r>/g
这里你需要把afafafdafdeifahgf内容首先复制到0寄存器里面去。这个方法有点不好的就是,如果你0寄存器里面的内容过长的话,会导致显示不全等。
2.还是使用0寄存器,这次不同的是,我们完全可以通过命令行调用寄存器值的方法,来避免直接获取内容。
%s/aaaaa/\=@/g
g&-表示在全局范围内,执行上次的substetute
我们有时候会交换两个单词,我们可以怎么实现呢?
例如
aaa bbb ccc ddd
现在我们交换单词bbb ccc的位置
方法一:
剪切 粘贴 -可是模式下选中ccc以及前面的空格->d->光标停留在aaa的最后一个a上->p
方法二:
使用交换命令substetute
%s//\={"bbb":"ccc","ccc":"bbb"}[submatch(1)]/g
vim 基础学习之替换的更多相关文章
- vim 基础学习之查找
普通模式下 /->正向查找 n-向下查找 N-向上查找 ?->反向查找 N-向下查找 n-向上查找 <C-r><C-w> <C-r>-引用,例如引用寄存 ...
- vim 基础学习之插入模式
插入模式1.字符编码,插入特殊字符 <C-v>{3位} 如,你想输入A,你可以在输入模式下<C-v>065(必须是3位) <C-v>u{4位} 如,你想输入¿,你可 ...
- vim 基础学习之global
global命令可以在指定模式下,匹配行上进行Ex命令 使用格式: :[range]g[lobal]/{pattern}/[cmd] range-是执行范围(如果缺省,是%) global-命令关键字 ...
- vim基础学习之搜索功能
当我们使用vim看源码的时候,我们可能会碰到一个方法或者变量,我们想要知道这个变量在其他地方的使用情况.这时候我们经常的做法就是退出当前的文件,或者是重新切换一个终端,然后使用grep或者find等s ...
- vim基础学习之自动补全功能
本章我们学习自动补全功能1.自动补全优先从当前的编辑区获得补全列表例如:我们写下如下内容 aaaaa aabbb aaab 当我们再次输入aa,然后我们按下Tab的时候,会弹出一个包含 aaaaa a ...
- vim基础学习1---简单命令
1:vim abc:如果有abc文件,则打开,否则创建之后打开 2:输入"i",才可以输入东西 3:按Esc,它是底行模式,再敲":wq 回车" 保存退出. 4 ...
- vim 基础学习之文件跳转
1. ''-当前文件上次跳转之前的位置2. '.-当前文件上次修改的位置,只要是发生了可能导致变化的命令操作就会被标记,哪怕实际结果没有变化3. '^-当前文件上次插入的位置,只要是发生了插入操作命令 ...
- vim基础学习之EX命令
:tabnew -创建新标签 :split(sp)-垂直分割窗口 如果没有打开新的文件,那么会打开原来窗口的文件 :vsplit(vsp)-水平分割窗口 如果没有打开新的文件,那么会打开原来窗口的文件 ...
- vim 基础学习之可视模式
1. 选择模式这个模式必须通过可视模式进入.在可视模式下,我们通过 <C-g>来把我们的可视选中块作为选择模式下的操作块. 这时候我们输入可见字符,就会把这个块给覆盖掉.例如aaa bbb ...
随机推荐
- Frame Stacking ZOJ 1083,poj 1128
Frame Stacking Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4034 Accepted: 1352 De ...
- Mysql优化ibdata1大小
在MySQL数据库中,如果不指定innodb_file_per_table参数来单独存在每个表的数据,MySQL的数据都会存放在ibdata1文件.mysql ibdata1存放数据,索引等,是MYS ...
- POJ 1151 线段树+扫描线
题意:求矩形面积的并 思路: 注意是[l,mid][mid,r] 这是真正的线段了 就当扫描线模板使吧~ //By SiriusRen #include <cmath> #include ...
- miniUI-SelectGrid 弹出选择表格-翻页选中
介绍 mini中已经给出 弹出表格的里例子 :MiniUi版本 但是在应用过程中遇到写小问题就是没有办法翻页后一并连之前翻页选中的一起提交 以下是解决方案 正文 下面首先介绍 JS 代码 //存储已 ...
- dedecms4张关键表解析之1
虽然dedecms默认共有87张表,但是只有4张最核心,最最要的表. 1.第一张表:dede_arctype 栏目表 dede设计者认为不管存放什么样的数据(文章,商品,电影)都应该属于某个栏目(类 ...
- 移动端 Modal 组件开发杂谈
Vant 是有赞开发的一套基于 Vue 2.0 的 Mobile 组件库,在开发的过程中也踩了很多坑,今天我们就来聊一聊开发一个移动端 Modal 组件(在有赞该组件被称为 Popup )需要注意的一 ...
- 雅礼集训1-9day爆零记
雅礼集训1-9day爆零记 先膜一下虐爆我的JEFF巨佬 Day0 我也不知道我要去干嘛,就不想搞文化科 (文化太辣鸡了.jpg) 听李总说可以去看(羡慕)各路大佬谈笑风声,我就报一个名吧,没想到还真 ...
- minixml的安装教程
最近想要实现对xml的解析,上网看到有很多库可以直接调用,例如minixml,tinyxml等,我选择了minixml(没有原因,纯属是因为这个找到了中文文档- -) 附上中文文档链接:https:/ ...
- CJOI 05新年好 (最短路+枚举)
CJOI 05新年好 (最短路+枚举) 重庆城里有n个车站,m条双向公路连接其中的某些车站.每两个车站最多用一条公路连接,从任何一个车站出发都可以经过一条或者多条公路到达其他车站,但不同的路径需要花费 ...
- 第6章8节《MonkeyRunner源代码剖析》Monkey原理分析-事件源-事件源概览-小结
本章我们重点环绕处理网络过来的命令的MonkeySourceNetwork这个事件源来阐述学习Monkey是怎样处理MonkeyRunner过来的命令的.以下总结下MonkeyRunner从启动Mon ...