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的内容放到新的文件中来
自己练习一下就知道了。