发信人:noclouds(景天云飞),信区:VIM
标题:vi编辑器的高级使用技巧(zz)
发信站:BBS水木清华站(SatMay2217:14:222004),站内
vi是unix操作系统提供的一个全屏幕文本编辑器,是程序员编辑源代码的一个重要工具。熟练掌握vi命令及其使用技巧往往能起到事半功倍的作用,大大提高编程工作的效率。在应掌握如i,a,o,0,m,x,u,dd,yy,dw,cw,s,.,/,Ctrl-F,Ctrl-B,Ctrl-G,w,q等基本命令外,下面笔者介绍一些实际工作中所常用的命令技巧。
1.将多个文件调入缓冲使用命令:viflname1flname2…flnameN编辑下一文件用:n;回到首文件:rew;查看当前编辑缓冲文件状态:args。
2.修改包含某一字符串的文件可与grep命令结合使用,如欲编辑当前目录下含有abc字串的所有C源程序:vi`grep-1abc*.c`
3.编辑在缓存中的两个文件快速切换命令::e#或Ctrl-^使用Ctrl-^命令更便捷,但如终端类型不正确该功能将无效。
4.将一个文件的部分内容读入另一文件中,有以下两种操作方式:
(1)将欲读入的内容用w命令写入一临时文件,再用r命令读入。该方法笨拙,临时文件需清理。
(2)将欲读入的内容写入一临时缓存器后再切换到目标文件,将光标移至需读入内容处,从缓存器中提出。
写入缓存器a命令:起始行mk 结束行″ay'k
从缓存器a中提出:″ap
该方法操作方便快捷,不会产生垃圾文件
5.放弃一修改过的文件,重新编辑
(1)使用命令 :q!强行退出后再viflname重新进入。
(2)使用命令 :e!强行重编辑更便捷。
6.定位文件尾用G比:更快捷,段落定位用(和)键,括号匹配定位用%,定位行首0,定位行尾,两行连接J。
7.行左移〈〈,行右移〉〉,该命令用于调整源码缩进格式简便快速。
8.大小写字母自动切换命令:shilft+~,屏幕刷新Ctrl-1。
9.当编辑的移动键失效时可用:map命令,但如终端类型不正确该命令将无效。
10.替换命令的特殊处理:文件行首用^标识,行尾用$标识。
如:1,s/^/abc/g表示文件行首加入abc字串
1,.s//abc/g表示文件首行至光标所在行行尾加入abc字串
11.在vi命令状态直接读入一外部命令执行结果:
!!+外部命令
如:
!!date
直接读入一系统日期
12.在vi中也可输入非ASCII码,如欲输入打印机的换页控制码^L(码值为12),其输入方法是先输Ctrl-v再输Ctrl-1即可,其中Ctrl-v是静默值。
13.显示vi文本中的隐含字符:setlist 取消显示:setnolist。
14.临时退出shell后将回到原编辑状态,在同一缓存中编辑另一文件:eflname。
15.'d d表示0-9的数字,代表最近打开的文件
16.连续三次dd后,:第一次dd出去的东西放哪儿呢。"3p
17.是否遇到过这样的情况,打开一个没有写权限的文件忘了sudo,修改了半天,保存时提示没法保存?怎么办?写到临时文件,sudo打开后再拷回来?太啰唆了,commandlinefu上学来了一招:
:w!sudotee%
18.tab,buffer,splitwindow的区别与联系
一个buffer对应一个存储上的文件或者一个未保存的文本,:bd
删除一个buffer,相当于通常编辑器的关闭文件操作.
可以用:ls看到所有buffer,推荐用BufExplorer切换buffer.
一个window就是一个buffer的视图,所以一个buffer可以有多个
window,关闭一个buffer的所有window(指用:close,不是:q)
并不会关闭文件.
因为window只是显示buffer的视图,所以一个window不同时刻
可以显示不同buffer的内容,这就是一般单窗口下我们用:bn,
:bp看到的效果.
一个tab就是多个window的集合,所以tab提供了一个布局的容器,
关闭一个tab(:tabclose)会关闭在其中的所有窗口,自然,并不会
关闭文件,这个是跟通常编辑器的关闭标签页截然不同的地方.