LUPA首页
|
资讯
|
教程
|
下载
|
求职
|
方案
|
博客
|
交易
|
英文版
游客:
注册
|
登录
|
会员
|
统计
|
帮助
LUPA论坛
»
技术交流
» 简单介绍vi的使用方法[译文]
‹‹ 上一主题
|
下一主题 ››
投票
交易
悬赏
活动
打印
|
推荐
|
订阅
|
收藏
|
开通个人空间
|
加入资讯
标题: 简单介绍vi的使用方法[译文]
wutong
关注开源
UID 141651
精华 0
积分 123
帖子 6
LUPA币 120 点
阅读权限 20
注册 2008-2-24
#1
发表于 2008-4-27 16:15
资料
短消息
简单介绍vi的使用方法[译文]
此文译自"Running Linux (4th edition)",如有错误,敬请指正。
[1] 运行vi
让我们启动vi并编辑一个文件。启动vi的命令是:
vi filename
例如:
eggplant$ vi test
这个命令将打开并编辑文件test,如果这个文件不存在,就会新建它。(eggplant是登入用户。)
你的屏幕看起来可能是这样的:
~
~
~
"test" [New File]
其中的~字符列说明当前光标位于文件的末尾,~字符并不属于这个文件。
[2] 插入文本和移动光标
使用vi的时候,vi都处于两种操作模式之一,或者说三种,取决于你怎么看。这些模式为:命令
模式(command mode),编辑模式(edit mode),扩展模式(ex mode)。
启动vi之后,它处于命令模式。我们很快会看到,这个模式允许你使用很多命令(通常是单个字母)
来修改文本。文本通常是在编辑模式下插入或者修改的。按一下字母i,vi就进入了编辑模式,这样就
可以打字插入文本了。
在插入文本的时候,你想要输入多少行就输入多少行,当然换行需要键入Enter键,并且可以使用
Backsapce键改正错误。按一下Escape键,就可以结束编辑模式,回到命令模式。
在命令模式下,你可以使用方向键在文件里面移动。你也可以使用hjkl这四个键,分别向左下上右移动
光标,特别是方向键不能工作的情况下。
除了按i键,还有几种方法进入编辑模式以插入文本。命令a在光标位置之后插入文本。命令o在当前行
之后开始新的一行并插入文本。
记住,任意时刻,vi可能处在命令模式(此时i a 或o命令是有效的),或者编辑模式(此时可以插入
文本,按Escape后回到命令模式)。如果不确定处于什么模式,就按一下Escape。这使得处于编辑模式
时退出之,若是处于命令模式则什么也不做,除了一声鸣叫。
[3] 删除文本和取消改动
在命令模式下,x命令删除光标下的字符。你可以用dd命令(按d两次)删除一整行。
刚刚删除的文本可以用p命令重新插入文件。按p可以将上次删除的内容插入到当前行之后。按P(大写)
可以将之插入到当前行之前。默认地,p和P会从"undo buffer"(回退缓存)取得文本;你可以从其他缓存
抽取文本,这个后面我们会看到。
命令u取消最近的改动。命令dd之后,按u等同于按p。如果用了i命令进入编辑模式并输入了大块文本,回到
命令模式立即按u会取消刚才的输入。
命令dw可以删除一个单词光标之后的字母。
[4] 修改文本
你可以用R命令改写文本,这将改写从光标处的文本。
你可以用r命令改写光标下的一个字符。这个命令不会使你处于插入状态,所以没必要用Escape来回到命令
模式。
命令~将改变光标下的字母的大小写,从大写到小写,或反之。
另一个有用的改变单词的命令是cw命令,这个命令(按下Escape之后)去除原词光标后的任何东西,并且可以
直接开始输入新词。假如新词比原词要长,那么空间会自动按需扩展。
[5] 移动命令
你已经知道怎样利用方向键在文档里面移动。此外,w命令把光标移动到下一个单词的开始,b命令当前单词
的开始。命令0(零)把光标移动到当前行的开始,命令$把它移动到行末。
编辑大文件时,你可能想要整个屏幕地向前或者向后移动。命令Ctrl-F向前移动一个屏幕,命令Ctrl-B向后
移动一个屏幕。
命令G可以把光标移动到文件的末尾。你也可以移动到任意一行:命令10G把光标移动到第10行。如要移动到
文件的开头,可用1G。
键入/和文本模式(pattern),在按回车Enter,会让你跳到光标之后第一次出现这个文本模式的地方。例如,
键入/burg并按回车,会把光标向前移动到后面第一次出现burg的地方。用?替代/将向后(反向)搜索文件。
跟随/和?之后的文本模式,实际上是一种正则表达式。正则表达式是一种为搜索和替换操作定义模式的强大
的方法,它用于许多Unix工具。利用正则表达式,举例来说,你若要搜索下一个大写字母,可以用这样的命令:
/[A-Z]
因此,如果用于搜索的文本模式不是静态的字符串,就可以使用正则表达式来定义你所想要的。
你可以把移动命令和其他命令配合起来使用,比如删除命令。例如,命令d$将删除从光标到行末的所有的字
符;命令dG将删除从光标到文件末尾的所有东西。
[6] 保存文件和退出vi
在vi中大多数处理文件的命令是在扩展模式(ex mode)下调用的。键入:(冒号),你就可以从命令模式进入
扩展模式。这时,光标将处于窗口的最后一行,让你可以输入多种扩展命令。
例如,保存写入被编辑的文件,可用命令:w。键入冒号使vi进入扩展模式,随后键入w和回车完成命令输入。
命令:wq将保存写入文件并退出vi。(命令ZZ,在命令模式下,没有冒号,是和:wq相似的,但它首先会检查文件
是否被修改,如被修改才会写入。)
要退出vi而不保存对文件的改动,可用命令:q!。单单使用:q将退出vi,但仅仅适用于改动已被保存或无改动
的情况。其中的!表示你确实要退出vi。
[7] 编辑别的文件
要编辑别的文件,可用:e命令。例如,当前正在编辑test文件,接着要改为编辑foo文件,可用这样的命令:
:e foo
如果你修改文件而没有保存时使用:e命令,你将得到出错信息:
No write since last change (:edit! overrides)
此时,你可以先用:w保存原来的文件,接着使用:e命令,或者使用这样的命令:e! foo,这个命令告诉vi不保存
原来的文件而编辑新的文件。当你编辑一个文件而意识到弄坏了它时,这个将会有用。这时你可以用:e!命令;当
没有指定文件时,vi将丢弃修改并重新编辑当前文件。
[8] 导入其他文件
使用命令:r,你可以将其他文件的内容复制到vi缓存。例如,这个命令:
:r foo.txt
可以将foo.txt文件中的内容插入到当前行之后。
[9] 运行Shell命令
命令:!允许你输入一个Shell命令的名字,这个命令将在vi内被执行。例如,这个命令:
:!ls -F
执行ls命令并在屏幕上显示结果。
命令:r!和:!类似,但是把所执行命令的标准输出包含到vi缓存中,即插入到当前行之后。
假如你所用的Shell支持作业控制(job control),比如tcsh和bash,当你需要执行一系列Shell命令时,使用暂停
键通常会变得更容易。
[10] 全局搜索和替换
vi的功能比这里所涉及到的多得多;大多数功能是以我们已学到的简单功能的组合方式实现的。这里有一两个
其他的功能,大多数vi使用者会觉得有用。
命令
:[x,y]s/pattern/replacement/flags
在x到y行之间搜索pattern,并且用文本replacement替换出现的pattern。pattern是一种正则表达式;replacement
是文本,但也可包含一些特殊字符用以代表原始pattern中的元素。下面的命令把1到10行之间各行第一次出现的
weeble替换为wobble:
:1,10s/weeble/wobble
相对于给出指定行号,你也可以使用%来代表整个文件。其他的特殊符号也可用于x和y的位置。$代表文件的最后
一行。而让x或y留为空白,代表当前行。
至于flag,你可以使用g,使得每一行出现的所有pattern都被替换,或者使用c,使得在每次替换之前要求确认。
多数情况下,你会使用g,除非你只想替换每一行第一次出现的pattern。
你也可以用记号(mark)来表示行。记号不过是单字母的名字,它是给文档内光标的位置起的名字。移动光标
到文件内的某个位置并按下ma,就会在那个位置设置记号a。(记号名字可以是字母a-z或A-Z。)用命令`a(后引号
backquote),可以直接移动光标到记号a处。用普通单引号('a),将把光标移动到记号a所在行的开头。
记号允许你“记住”代表文本区域的光标位置。例如,如果要对一块文本进行搜索替换,你可移动光标到文本
的开始处,设置一个记号,比如a,接着移动光标到文本的末尾,执行这样的命令:
:'a,.s/weeble/wobble/
其中'a代表包含记号a的行,.代表当前行。
[11] ...
[广告]
推荐个超酷的web2.0相册
mathbox
开源大师
UID 31649
精华 0
积分 6580
帖子 464
LUPA币 6348 点
阅读权限 50
注册 2007-2-28
#2
发表于 2008-4-28 09:12
资料
主页
个人空间
短消息
实用详细 貌似还没写完 希望LZ补全
开源:人之所需,时之所趋,共进之模式!
http://mathbox.lupaworld.com
[广告]
推荐个超酷的web2.0相册
chinasky
关注开源
UID 191166
精华 0
积分 51
帖子 2
LUPA币 50 点
阅读权限 20
注册 2008-4-28
#3
发表于 2008-4-28 11:08
资料
短消息
VI跟dos里面的edit一样,是一个不错的linux文本编辑程序。
[广告]
推荐个超酷的web2.0相册
mathbox
开源大师
UID 31649
精华 0
积分 6580
帖子 464
LUPA币 6348 点
阅读权限 50
注册 2007-2-28
#4
发表于 2008-4-28 13:50
资料
主页
个人空间
短消息
是的 但对于初学者来说 稍微难了点 不过有点耐心的话 也还可以的 呵呵
开源:人之所需,时之所趋,共进之模式!
http://mathbox.lupaworld.com
wutong
关注开源
UID 141651
精华 0
积分 123
帖子 6
LUPA币 120 点
阅读权限 20
注册 2008-2-24
#5
发表于 2008-5-2 08:20
资料
短消息
第11节是关于寄存器和复制文本的,已译出,见附件(全文)。
另外,总结出了最有用的10个命令:
1 按一下Escape键回到命令模式;
2 i从命令模式切换到编辑模式;
3 :q!不保存修改退出vi;
4 :w保存文件(:wq保存并退出);
5 u取消最近的改动(按多次取消最近的多次改动);
6 :%s/pattern/replacement/g全文搜索替换文本(/pattern向前搜索文本);
7 ma设置记号a代表光标位置;
8 d`a删除从记号a到当前光标的文本;
9 p粘贴文本到光标之后;
10 y`a复制从记号a到当前光标的文本到剪切板。
附件
: [vi的使用方法]
vi_introduction.txt.gz
(2008-5-2 08:20, 4.88 K)
该附件被下载次数 48
投票
交易
悬赏
活动
LUPA论坛
专题指导
> 内核问题答疑
> FreeBSD专版
LUPA论坛
> 开源思想交流
> 人物专栏
> LUPA足迹
> 推进员之家
> 网页标准化
> 投稿区
> 技术交流
> 初级问答[新手区]
> 有奖评书专区
> 社区茶馆
> 美景美图
> 创业就业
> 游戏专版
> IT界评论
> 技术文档
> Linux基础
> 跨平台应用
> ErLang专区
> 软件应用
> LAMP专区
> Shell编程
> JAVA
> 高级应用
> PHP
> 邮件服务器
> 嵌入式开发
> 数据库
> FTP技术
> 网络安全
> Solaris专区
> 其他Unix系列
> windows平台开源软件介绍
> 其他编程语言
> 高校教学认证专版
> 认证公告和教学指导
> 技术支持
> 操作员认证专题
> 网管员认证专题
> LAMP工程师认证专题
> 社区管理
> 社区活动
> LUPA基金会
> 开源社区广告同盟
> 人员调整公告
> 回收垃圾
Linux平台开发专版
> C/C++语言基础
> 开发工具使用
> GTK/QT图形库
> 开发包调用
> 软件包制作
合作专区
> 开源项目合作建设
> X-Vake威客系统
> Serious Game底层引擎
> 蓝迪游戏
> ExtMail
> WiseReal教育软件
> Works.lt信息化平台
> LGsearch桌面搜索
> FireFox插件开发
> LUPA考试系统
> Linuxer电子杂志
> Easyjf专版(简易JAVA框架)
> 恩信ERP
> 希瑞CRM
> Zen Cart购物车
> Klinux 发行版定制
当前时区 GMT+8, 现在时间是 2008-7-6 06:06
浙ICP备06002895号
Powered by
Discuz!
5.0.0
© 2001-2006
Comsenz Inc.
Processed in 0.050309 second(s), 7 queries , Gzip enabled
TOP
清除 Cookies
-
联系我们
-
LUPA开源社区
-
Archiver
-
WAP
控制面板首页
编辑个人资料
积分交易
公众用户组
好友列表
基本概况
流量统计
客户软件
发帖量记录
论坛排行
主题排行
发帖排行
积分排行
在线时间
管理团队
管理统计