如何在vi中优雅地使用ex

记得刚开始用vi的时候,只会用:wq或者:q来退出,后来又学会了ZZ,今天上班路上没事做,又把 Learning the Vi & VimIntroducing the ex Editor 过了一遍,又发现了一个退出命令-:x,其实很早以前这些内容都看过,但是由于使用惯性,渐渐地会把一些平时不太用到的命令给遗忘了,其实一个防止遗忘的好办法就是认真总结一下,方便以后查阅。

其实当我们在命令模式下按下冒号后,就已经进入ex编辑模式了,也就是说退出时使用的命令wq q x其实都是ex的命令。vi的行编辑都也都是通过ex完成的。

那么问题来了,如何在vi中优雅地使用ex呢?

ex是一个行编辑器(Line Editor),所以必须要把需要操作的行号范围传给它。

行操作命令

全称缩写
deleted
movem
copyco
copyt

多行操作

用一段python脚本生成一个多行的文件,并且把行号都标记出来。

for i in range(1, 1000):
    print 'this is line #', i 

把脚本文件保存成producer.py文件,然后执行脚本

python producer.py >> practice

生成了一个新文件practice

可以通过 :set nu:set nonu 来控制左侧行号的显示。


先执行一个简单的删除多行的操作:

:3,18d

删除第3行到第18行。


其他命令功能类似,移动多行

:10,20m2

把第10行到第20行的内容移动到第2行下面。


还有拷贝多行

:23,29co100

或者

:23,29t100

多行操作就这么简单 - 行号+命令

行符号

ex当然也没忘记为我们提供一些特定的符号来表示特定的行。

符号代表行
.当前行
$最后一行
%所有行

用法举例

  • :.,$d 删除当前行以及当前行下面的所有行
  • :20,.m$ 把20行到当前行的内容移动到最后一行的下面,也就是文件末尾
  • :%d 删除所有行
  • :%$ 把所有行复制到文件末尾

行号也支持加减运算

  • :.,.+20d 删除当前行以及后面的20行,一共21行
  • :226,$m-2
  • :.,+20# #用来添加行号
  • :-,+t0 当前行的上一行到当前行的下一行(共三行)

Search Patterns

  • :/pattern/d
  • :/pattern/+d
  • :/pattern1/,/pattern2/d
  • :.,/pattern/m23

Global Searches

  • :g/pattern
  • :g/pattern/p
  • :g!/pattern/nu
  • :60,124g/pattern/p

Combing ex Commands

  • 1,3d | s/thier/their/
  • 1,5 m 10 | g/pattern/nu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值