常用技巧
1. 如果想不退出vi而查看UNIX系统的有关信息,输入“:shell ”即可进入vi以前的shell环境,“exit”退回到vi编辑状态。
2. shift+ZZ 保存后自动退 和 :wq 是一样的
3. 直接运行命令,不退出VI :! 命令 Demo::! ls
4. 将其他文件内容导入当前编辑文件中,:r 文件名 Demo::r /etc/hosts
结合第3条可以这样插入日期 Demo::r !date
5. 像UltraEdit一样的列选功能,在VI也能用,按Ctrl + V,用向下或向上键选择行,再按Shift+I,然后输入要输入的符号,最后ESC。(Gvim下用Ctrl+Q,不然变成黏贴了)
我们常用这个方式加注释,还有更简单的方法 :起始行,终止行s/要替换字符/替换为新字符/g Demo::1,20s/^/#/g
6. 重复上次操作,有的时候我们经常做重复操作,先在第一行上操作例如删除第一个字母,然后到你要重复的行,然后 . (就是有>号的键)
7. 如果想把一个字母进行大小写变换,可以在字母上按SHIFT+~.
8. :global 可以简写为:g :g! :vg
:g/^/m 0 #倒序文件行
:g/^$/d #vi中删除空行
:g/^/+1 d #删除偶数行 也可以用normal命令 :%norm jdd
:g/^/d|m. #删除奇数行
屏幕翻滚类命令
Ctrl+u 向文件首翻半屏
Ctrl+d 向文件尾翻半屏
Ctrl+f 向文件尾翻一屏
Ctrl+b 向文件首翻一屏
nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部(这里要敲回车)
插入文本类命令
i:在光标前
I:在当前行首
a:光标后
A:在当前行尾
o:在当前行之下新开一行
O:在当前行之上新开一行
r:替换当前字符
R:替换当前字符及其后的字符,直至按ESC键
s:从当前光标位置处开始,以输入的文本替代指定数目的字符
S:删除指定数目的行,并以所输入文本代替之
ncw或nCW:修改指定数目的字
nCC:修改指定数目的行
删除命令
ndw或ndW:删除光标处开始及其后的n-1个字
do:删至行首
d$:删至行尾
ndd:删除当前行及其后n-1行
x或X:删除一个字符,x删除光标后的,而X删除光标前的
Ctrl+u:删除输入方式下所输入的文本
搜索及替换命令
/pattern #从光标开始处向文件尾搜索pattern
?pattern #从光标开始处向文件首搜索pattern
n #在同一方向重复上一次搜索命令
N #在反方向上重复上一次搜索命令
:s/p1/p2/g #将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g #将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g #将文件中所有p1均用p2替换
:%s/p1/p2/g #将在全文中把所有p1无用p2替代
如果你是在写程序,你可能只想替换那些出现在注释中的"four",代 码中的留下。
这可有点为难,"c"标志可以让每个目标被替换之前询问你的意见:
Demo: %s/\<four\>/4/gc
:%s/\/\//xx/g #全文替换“\\” 为 "xx",需要转义
:%s;//;xx;g #全文替换“\\” 为 "xx", 用“;”,不用转义"/",这里的";"也可以换成其它符号,“!,#,*”等。。。。
(当然,替换";" 如果用分号分隔就要转义,用"/"就不需要了,两个交换着用就都不用转义了)
文本相关操作
J 表示,其功能是把光标所在行与下面一行合并为一行
nJ 表示,其功能是把光标所在行与下面n行合并为一行
:n1,n2 co n3 #将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3 #将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d #将n1行到n2行之间的内容删除