Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2617866
  • 博文数量: 323
  • 博客积分: 10211
  • 博客等级: 上将
  • 技术积分: 4934
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-27 14:56
文章分类

全部博文(323)

文章存档

2012年(5)

2011年(3)

2010年(6)

2009年(140)

2008年(169)

分类: 系统运维

2009-02-25 22:49:51

  用VI好几年了,但我经常用的命令不超过10个。也许编辑的任务都比较简单,所以至今也没觉得还需要去识记更多的命令。但多记住几条命令是没坏处的,至少在编辑效率上会有所提高。下面摘录一些vi常用的命令。
 
一般模式:光标移动

h 或 ->     光标向左移动一个字符
l 或 <-     光标向右移动一个字符
k 或 上方向键    光标向上移动一个字符
j 或 下方向键    光标向下移动一个字符
Ctrl+f     屏幕向前翻动一页
Ctrl+b     屏幕向后翻动一页
Ctrl+d     屏幕向前翻动半页
Ctrl+u     屏幕向后翻动半页
+     光标移动到非空格符的下一列
-     光标移动到非空格符的上一列
0     (数字0)移动到这一行的第一个字符处
$     移动到这一行的最后一个字符处
H     光标移动到这个屏幕最上方的那一行
M     光标移动到这个屏幕中央的那一行
L     光标移动到这个屏幕最下方的那一行
G     移动到这个文件的最后一行
nG    移动到这个文件的第n行。
n     光标向下移动n行

一般模式:查找与替换
 
/str     在光标之后查找一个str字符串。n for next
?str     在光标之前查找一个str字符串。n for next
:n1,n2s/str1/str2/g       在第n1与n2行之间查找str1这个字符串,并将该字符串替换为str2
:%s/str1/str2             全文查找str1这个字符串,并将每行最左边的第一处str1替换为str2
:%s/str1/str2/g          全文查找str1这个字符串,并将每处str1替换为str2
:1,$s/str1/str2/g         从第一行到最后一行查找str1字符串,并将该字符串替换为str2
:1,$s/str1/str2/gc        从第一行到最后一行查找str1字符串,并将该字符串替换为str2,且在替换前显示提示符让用户确认(confirm)
 
 
一般模式:删除、复制与粘贴
 
x,X    x为向后删除一个字符,X为向前删除一个字符
nx     向后删除n个字符
dd     删除光标所在的那一整行 
ndd    删除光标所在列的向下n列,例如,2dd则是删除2列
d1G    删除光标所在行到文件首行的所有数据
dG     删除光标所在行到文件尾的所有数据
yy     复制光标所在行
nyy    复制光标所在列的向下n列,例如,2yy则是复制2行
y1G    复制光标所在列到第一列的所有数据
yG     复制光标所在列到最后一列的所有数据
p,P    p为复制的数据粘贴在光标下一行,P为粘贴在光标上一行
J      将光标所在行与下一行的数据连接成一行
u      恢复前一个动作
xp     当前字符与后边的字符互换
ddp    当前行与下一行互换
 

编辑模式:

.             重复上一动作

i,I           插入:在当前光标所在处插入输入的文字,已存在的字符会向后退
a,A           添加:由当前光标所在处的下一个字符开始输入,已存在的字符会向后退
o,O           插入新的一行:从光标所在处的下一行行首开始输入字符
r,R           替换:r会替换光标所指的那一个字符;R会一直替换光标所指的文字,直到按下Esc为止
Esc           退出编辑模式,回到一般模式

 

命令行模式:

:w      将编辑的数据写入硬盘文件中
:w!     若文件属性为只读,强制写入该文件
:e!     重新编辑当前文件(之前的编辑将不会保存)
:q      退出vi
:q!     若曾修改过文件,又不想保存,使用!为强制退出不保存文件
:wq     保存后退出,若为:wq!,则为强制保存后退出
:x      保存后退出,文件若无变化则不写
:w[filename]    将编辑数据保存为另一个文件
:r[filename]    将filename这个文件内容加到光标所在行的后面
:set nu      显示行号
:set nonu    取消显示行号
n1,n2w[filename]   将n1到n2的内容保存为filename这个文件

阅读(1213) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~