我们前面学习的VI命令,尽管操作起来很直观,但对于重复性的批量操作,用起来还是效率不高。VI为我们提供了另一种操作,就是利用ex命令,来自动进行批量操作,如批量替换一个变量名等。
VI的底层就是行编辑器ex,所以VI可以很方便的调用ex命令。在vi中输入Q进入ex模式,在ex模式中输入vi或visual进入vi模式。vi在命令模式下输入冒号,即可调用ex命令。
ex命令由范围和操作组成,如1p就是打印第一行。如果省略范围就是对当前行进行操作。
ex的范围与sed类似,有绝对位置、相对位置和匹配位置3种:
绝对位置: 如1(第一行);15,23(第15到23行) 相对位置: 根据当前位置得到的相对位置,如.+2(当前行后面第2行) 搜索到的位置: 如/protein/(光标所在行后面第一个包含protein的行)
ex操作有下面一些:
操作 缩写 例子 print p :1p delete d :10,20d yank ya或y :5,8ya put pu :pu move m :10,15m20 copy co或t :25,28t40 substitute s :1,$s/protein/Protein/g
需要注意的是,ex命令中,p是打印,pu才是粘贴,这一点是与vi命令不一样的。使用yank(y)/put(pu)和delete(d)/put(pu)完成的操作,可以分别用copy(co)和move(m)一步完成。
ex中,“.”表示当前行(可以省略),$表示最后一行,%表示所有行(相当于1,$),如:
:d 删除当前行 :%t$ 复制所有行,然后放到末尾 :20,.m$ 把20到当前行移动到文件尾
熟练掌握ex命令,才能更有效地利用VI编程,才算是真正掌握了VI。