vim的ex模式介绍

  vim底层是行编辑器ex,这东西产生于终端时代,那时候输入者们需要print一行东西,然后输入编辑内容,然后再print才能看到该行。目前大多数的编辑 操作都不会直接用到 这个老前辈了,不过你要修改多个文件的时候,这东西还是比较有用的。


 


1、使用 ex filename打开文件;这时候你看不到文件的内容,只能看到该文件的行数还有冒号提示符


2、ex命令由一个行号和一个命令组成,比如1p,1是行号,p是print命令,事实上,p是默认的,当只有行号的时候,也能打印东西出来,就是行号所表示的行。1,3表示打印从第一行到第三行,没有行号的时候,则表示操作的是当前行。


3、在提示符输入vi,就进入vi界面了


4、在vi里面调用ex命令,需要进入命令模式,在输入冒号,然后enter键即可


wait,发现这原来就是vi用来替换的方法,原来底层是用了ex编辑器。


5、在vi中输入大写的Q进入ex模式,在ex模式中输入vi进入vi


6、要用一个命令操作一个块的时候,你会发现,ex还是蛮有用的,


7、几个ex常用命令



  • delete  缩写为d

  • move   缩写为m

  • copy     缩写为co,还有一个缩写是t


8、 ex命令中,你需指定行的地址来执行命令。你可以用三种方式来指定行地址



  • 一个是绝对的行号;

  • 一个是根据你当前位置得到的相对位置;

  • 一个是搜索到的位置。


9、命令举例




:3,18d


删除3到18行的内容


:150,180m23


把150到180这个块移动到23行后面


:23,38co100


把前面的部分拷贝到100行后面


需要行号显示的时候,:set nu这个命令会对你帮助甚大



 


10、对于ex来说,行尤为重要,在编辑的时候,你可以用.来表示当前行,$来表示最后一行,而%最代表每一行,使用%的话,相当于1,$ ,这些东西能和显式的行号搭配使用。




:d 删除所有的行


:%t$ 拷贝所有行,然后放到末尾


:20,.m$把20到当前行移动到文件尾


ps: vi里面 trl+G 显示当前行,在ex里,你可以用:.=得到相同的结果 ,也可以用:=得到文件的总行数,使用:/pattern/=则打印出模式出现的第一次的行数



 


11、相对行号的设置,+号和-号放在数字中间的时候,用来表示数字范围




:.,.+20 当前行到当前行后的20行


:226,$m.-2  226到结束,移动到当前行前的两行



 


12、嗯,事实上,当你使用相对行号的时候,当前位置甚至不需要你输入.,默认位置就是从当前位置算起的。


 


13、没忘记,还有一种搜索寻址的方式没讲,直接上例子。




:/pattern/d  删除模式后面一行


:/pattern/+d 删除模式后面一行的下一行


:/pattern1/,/pattern2/d 删除模式1第一行到包括模式2的第一行



 


14、有时候可能你迷糊了一下,觉得这样就能删掉100行以后的5行




:100,+5 d


事实上却告诉你这样一般来说是不行的,因为相对行默认是以当前行为起点的,所以你这个命令的执行结果有赖于你当前行的位置。这时候ex提供了一个让你延续这种习惯的语法


:100;+5 d


看明白了吗,把中间的逗号换成分号,你就可以以前操作数作为相对位置的起点了。



 


15、g代表全局范围




:g/pattern 在全局找pattern出现的最后位置


:g/pattern/p 找到包含模式的所有行


:g!/pattern/p 找到所有不包含模式的行



 


16、使用|能够在一行执行多个ex命令


17、接下来这个命令,用过vi的人耳熟能详,它们当然也是ex



  • (1):w 保存文件

  • (2):q 退出文件

  • (3):x  保存并退出


同样能保存并退出的是vi的命令ZZ


小小的tip一下,使用:x的时候,如果文件没有被修改,则其修改时间不变,而:wq则不管文件有没有被修改,都会写入新的修改时间


在这些命令上打上!号,是强制执行的意思,比如q!,不保存而退出


 


18、有意思的用法




a.使用ex,你可以拦路抢劫式的把文件的一部分保存为另外一个文件


:230,$w newfile  把230到末尾的内容保存到newfile中


:.,500w  newfile  把当前行到500行的内容保存到新文件中


b.你还可以把一段文本拿出来送给另外一个已经存在的文件someone


如:


:1,10w >>someone 把1到10行的内容写到新文件的末尾去



 


19、有时候你可能需要从别的文件里找点灵感,拷贝点东西什么的,你需要用到:r选项(全称是:read)


:r filename


这个命令会把目标文件的内容插入到光标以下,如果你需要指定插入位置,请记得使用行号


:190r /path/filename


 


20、跋涉良久,终于来到了多文件编辑


使用vi file1 file2可以打开多个文件,切换第一个文件之外的文件,可以使用:n选项


如果你不需要一开始就打开多个文件,你可以在vi界面使用:e filename打开另外一个,使用:e #可以在他们之间做相互切换,此时,%代表你正在编辑的文件的文件名,#代表看不到的那个的文件名。


如     :w %.new 写入一个比当前文件多.new后缀的文件


btw:考虑到切换文件的事情干多了比较累,vi提供了一个简单点的快捷键,ctrl+^,千万别只看表面,^这个符号需要按shift+6才会出来,所以ctrl+shift+6才是快简介的真身


 


21、知道了怎么切换文件,那么在a文件里yank一下,b文件里paste一下也就不成问题了。同样,对于块这样级别的操作,有时候用ex给的方案貌似更经典。




:160,224ya a


把160到224行拷贝,放入a寄存器


切换文件


:pu a


把a的内容放到新的文件中来



 


自己练习一下就知道了。

转载于:https://my.oschina.net/alphajay/blog/56286

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值