Chinaunix首页 | 论坛 | 博客
  • 博客访问: 59604
  • 博文数量: 26
  • 博客积分: 315
  • 博客等级: 二等列兵
  • 技术积分: 299
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-05 17:32
文章分类
文章存档

2014年(13)

2013年(3)

2012年(10)

我的朋友

分类: LINUX

2014-02-08 21:43:11


        本附录包含的是本书(([美]:《Unix&Linux大学教程》附录B,译,清华大学出版社,2010年))中所涉及的全部vi命令,更多的信息请参见第22章,这一章详细讨论了vi

启动

vi file                              启动vi,编辑指定的文件

vi –R file                          以只读模式启动vi,编辑指定的文件

view file                            以只读模式启动vi,编辑指定的文件

vim file                             启动vim,编辑指定的文件

vim –C file                         以兼容模式启动vi

停止

:q!                              不保存数据而停止

ZZ                               保存数据并停止

:wq                              保存数据并停止

:x                               保存数据并停止

系统故障后恢复

vi –r                           显示可以恢复的文件的名称

vi –r file                         启动vi,恢复指定的文件

修订键

/                 删除键入的最后一个字符

^W                               删除键入的最后一个单词

^X/^U                            删除整行

:map g 1G                        定义宏,使g1G拥有相同效果

:n                                   跳转到行号n

:1                               跳转到编辑缓冲区中的第一行

:$                               跳转到编辑缓冲区中的最后一行

插入

i                                切换到插入模式:在光标位置前插入

a                                切换到插入模式:在光标位置后插入

I                                切换到插入模式:在当前行开头插入

A                                切换到插入模式:在当前行末尾插入

o                                切换到插入模式:打开当前行下面一行

O                                切换到插入模式:打开当前行上面一行

<Escape>                             离开插入模式,切换到命令模式

进行修改

r                                    只替换1个字符(不进入输入模式)

R                                键入中进行替换

s                                通过插入替换1个字符

C                                    通过插入从当前光标替换到行末

cc                                   通过插入替换整个当前行

S                                    通过插入替换整个当前行

cmove                                通过插入从当前光标替换至move指定的位置

~                                    改变字母的大小写

替换模式

:s/pattern/replace/                  替换当前行

:lines/pattern/replace/              替换指定行

:line,lines/pattern/replace/         替换指定范围

:%s/pattern/replace/                 替换全部行

在命令的末尾,使用c可以用来请求确认,g(global,全局)可以用来替换每行的全部匹配结果。指定行号时,可以使用一个实际数字,也可以使用.(句号)表示当前行,或者$(美元符号)表示编辑缓冲区的最后一行。数字1表示编辑缓冲区中的第一行。

 

撤销或重复改变

u                                     撤销修改编辑缓冲区的上一条命令

U                                     恢复当前行

.                                 重复修改编辑缓冲区的上一条命令

分隔和连接行

r                             将当前行分隔成两行(将字符替换成新行字符)

J                                     将当前行与下一行连接成一个长行

:set wm=n                            在离右边缘n个位置时自动换行

删除

x                                     删除光标处字符

X                                 删除光标左边的字符

D                                 从当前光标删除到行尾

dd                                删除整个当前行

dmove                                从当行光标删除到move所指定的位置

dG                               从当前行删除到编辑缓冲区的末尾

d1G                              从当行前删除到编辑缓冲区的开头

lined                             删除指定的行

:line,lined                       删除指定的范围

删除:有用的组合

dw                               删除1个单词

dnw                              删除n个单词

dnW                              删除n个单词(忽略标点符号)

db                               向后删除1个单词

dn)                              删除n个句子

dn}                               删除n个段落

dG                               从当前行删除到编辑缓冲区的末尾

dgg                              从当前行删除到编辑缓冲区的开头

d1G                              从当前行删除到编辑缓冲区的开头

复制上一次删除

p                                复制缓冲区:插入到当前光标后面/下面

P                                    复制缓冲区:插入到当前光标前面/上面

xp                               调换两个字符

deep                             调换两个单词(从第一个单词的左边开始)

ddp                              调换两行

''1pu.u.u...                     恢复某一次删除

复制与移动行

:linecotarget                        复制指定的行,在目标下面插入

:line,linecotarget                   复制指定的范围,在目标下面插入

:linemtarget                         移动指定的行,在目标下面插入

:line,linemtarget                    移动指定的范围,在目标下面插入

接出

ymove                                将当前光标接出到move

yy                               接出整个当前行

接出:有用的组合

yw                               接出1个单词

ynw                              接出n个单词

ynW                              接出n个单词(忽略标点符号)

yb                               向后接出1个单词

yn)                              接出n个句子

yn}                              接出n个段落

yG                              从当前行接出到编辑缓冲区的末尾

ygg                             从当前行接出到编辑缓冲区的开头

y1G                                 从当前行接出到编辑缓冲区的开头

执行shell命令

:!command                           暂停vi,执行指定的shell命令

:!! pause vi,                    执行上一条shell命令

:sh                             暂停vi,启动一个shell

:!csh                           暂停vi,启动一个新的C-Shell

向编辑缓冲区内读入数据

:liner file                         在指定行后插入file 的内容

:r file                             在当前行后插入file 的内容

:liner !command                     在指定行后插入command的输出

:r !command                         在当前行后插入command的输出

:r !look pattern                   插入以指定模式开头的内容

使用shell命令处理数据

n !!command                         对第n行数据执行command

!move command                       对当前光标至move所指定的位置的数据执行command

!move fmt                        格式化当前光标到move所指定的行

写入数据

:w                                  将数据写入到原始文件

:w file                             将数据写入到指定文件

:w>> file                           将数据追加到指定文件

在编辑过程中改变文件

:e file                             编辑指定的文件

:e! file                            编辑指定的文件,忽略自动检查

缩写

:ab short long                      设置shortlong的缩写

:ab                             显示当前的缩写

:una short                              取消缩写short

 


注: Chinaunix的博客排版略有些问题,可参见新浪博客更好的排版,http://blog.sina.com.cn/s/blog_62cafbc601017nhh.html
阅读(854) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~