日期:2014-05-16 浏览次数:20789 次
本文链接:http://codingstandards.iteye.com/blog/966982 ? (转载请注明出处)
??? vi是Linux/Unix中最常用的文本编辑器,它是全屏幕的编辑器,类似DOS/Windows下的edit程序,但它的使用方式与edit很不一 样。vi是“Visual Interface”的缩略词,来源于另外一个文本编辑器ex的命令visual。vi是一种模式编辑器。不同的按键可以更改不同的“模式 (mode)”;比如说:在“插入模式(insert mode)”下,输入的文本会直接被插入到文档;当按下“退出键(ESC)”,“插入模式”就会更改为“命令模式(command mode)”,并且光标的移动和功能的编辑都由字母来响应,例如:“j”用来移动光标到下一行;“k”用来移动光标到上一行,“x”可以删除当前光标处的 字符,“i”可以返回到“插入模式”(也可以使用方向键)。在“命令模式”下,敲入的键(字母)并不会插入到文档,这使得新接触vi的用户很迷惑。
??? 在Linux下,我们在使用vi时实际使用的是vim(Vi IMproved),vim是一个与vi向上兼容的文本编辑器(Vim? is a text editor that is upwards compatible to Vi)。说实话,vi中的命令实在太多,无法全部掌握,本文只列举了一些常用的,想对vi/vim有更多了解的话,可以参考后面的相关资料部分。
?
格式:vi <file>
使用vi编辑<file>指定的文件。
?
格式:vi -R <file>
格式:view <file>
用vi打开<file>指定的文件,但不能编辑,即只读模式。要达到类似的效果也可以使用more/less。
?
格式:vi <file1> <file2>
格式:vi <file1> <file2> <file3>
用vi打开多个文件编辑。如果在编辑完第一个文件之后按:q退出,vi就会提示“E173: 还有 2 个文件未编辑”,可以使用:n继续编辑下一个文件。
?
格式:vi +n <file>
用vi编辑<file>指定的文件,并且将光标定位到第n行,从1开始计数。如:vi +2 1.txt。
?
格式:vi +/pattern <file>
用vi编辑<file>指定的文件,并且将光标定位到符合pattern模式的行。如:vi +/world 1.txt。
?
下面对vi下常用的编辑命令做一个小结:注意大小写,效果是不一样的。
?
ESC 退出插入模式;有时候为了确认不是在插入模式,可多按ESC键,因为下面的命令都是在命令模式执行的。
?
小写i? 进入插入模式,插入点在当前光标之前;
小写a 进入插入模式,插入点在当前光标之后;
大写A 进入插入模式,插入点在当前行末尾;
小写o 进入插入模式,插入点在当前行后,新增一行;
大写O 进入插入模式,插入点在当前行前,新增一行;
?
下面是常用的删除命令:
小写x 删除当前光标后的字符;
大写X 删除当前光标前得字符;
小写dw 删除一个单词;
小写dd 删除一行;
小写d$ 删除至行尾;
?
下面是常用的移动光标的命令:
上下左右箭头 这个你懂的;还有hjkl这四个字符分别是左下上右四个方向移动光标,不常用;
数字0 定位到行首;
美元符$ 定位到行尾;
?
下面几个是常用的搜索命令:
/pattern 查找pattern匹配的位置
n 定位到下一个匹配的位置
N 定位到前一个匹配的位置
?pattern 与/pattern相反,它是反向查找的,同样的n和N的定位方向也是相反的。
注意pattern为正则表达式,但与java里面的有些不一样。比如()不是元字符,\(\)才是。
?
还有一些常用的行命令,即冒号跟上一些字符然后回车,如:
:0 定位到第一行;
:$ 定位到最后一行;
:n 定位到n行,其中n为任意数字;
:.= 显示当前行号;很多时候都需要确定当前的行号;
?
下面是常用的替换命令:
:%s/pattern/replace/g 将符合pattern模式的所有字符串替换为replace,如 :%s/123/456/g
:n,m/pattern/replace/g 将符合pattern模式的所有字符串替换为replace,但只对从n到m行之间的替换。
注意%s相当于1,$,即从第1到最后一行。
?
保存和退出命令:
:w 保存
:wq或:x 保存并退出
:q! 不保存,退出
?
在安装了RHEL5.5后,我发现一个问题,在使用vi编辑c代码文件时,不支持语法高亮显示,开始时以为是没有安装vim-enhanced软件包,一查之后发现这个猜测错了,如下所示:
[root@jfht ~]# rpm -qa | grep vim
vim-minimal-7.0.109-6.el5
vim-common-7.0.109-6.el5
vim-enhanced-7.0.109-6.el5
[root@jfht ~]#
这个问题让我迷惑了很久,后来发现在这个版本下vi和vim两个程序的表现不一样,直接用vim命令就没有问题了,在/etc/profile的尾部增加了一个别名(alias)就可以使用vi命令获得同样的效果了,如下所示:
alias vi="vim"
保存/etc/profile重新登录,就会发现vi可以支持语法高亮显示了。
?
vim支持语法高亮显示,每种语言它定义了语法显示样式文件,通常在/usr /share/vim/vim70下(注意目录中的vim版本)找到filetype.vim,其中syntax目录下有很多.vim文件,它定义了各种 语言的语法高亮显示规则。你也可以增加自己的语法规则,当然需要熟悉其中的规则。
?
[root@web ~]# less /usr/share/vim/vim70/filetype.vim
" Vim support file to detect file types
"
" Maintainer:?? Bram Moolenaar <Bram@vim.org>
" Last Change:? 2006 Aug 25
" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
? finish
endif
let did_load_filetypes = 1
" Line continuation is used here, remove 'C' from 'cpoptions'
let s:cpo_save = &cpo
set cpo&vim
augroup filetypedetect
" Ignored ex