linux 下vi进行文件编辑

来源:互联网 发布:淘宝达人在哪申请 编辑:程序博客网 时间:2024/05/18 03:19

用 vi 进行文件编辑

原地址:http://hi.baidu.com/guolele17080/item/8f36bc09d2803e14acdc7055

使用 vi
vi 编辑器几乎在所有 Linux 和 UNIX 系统上都存在。实际上,如果系统只有一个编辑器,那么它可能就是 vi,所以了解 vi 的操作方式是有意义的。


启动 vi
大多数 Linux 发行版本现在附带 vim(表示 Vi IMproved,改进的 vi)编辑器而不是传统的 vi。vim 向上兼容 vi,并有图形模式(gvim)以及标准的 vi 文本模式界面。vi 命令常常是 vim 程序的别名或符号链接。前面的 修改优先级 一节中,我们希望修改正在运行的 count1.sh shell 脚本的优先级。如果您自己尝试这个操作,就会发现这个命令运行得太快了,没有足够的时间可以用 renice 完成优先级修改。所以我们要使用 vi 编辑器在文件的开头添加一行,从而让进程睡眠 20 秒,这样就有时间修改优先级了。
要启动 vi 编辑器,使用 vi 命令并以文件名作为参数。有许多选项可供选用,细节请参考手册页。使用命令


vi count1.sh 


应该会看到与清单 115 相似的显示。如果使用 vim,一些单词可能是不同颜色的。vim 有语法突出显示模式(原始的 vi 编辑器没有这种模式),在系统上这种模式可能是默认打开的。


清单 115. 使用 vi 编辑 count1.sh




x="$1"
echo "$2" $(date)
while [ $x -gt 0 ]; do let x=$x-1;done
echo "$2" $(date)
~
~
~
~
~
~
"count1.sh" 4L, 82C 


vi 模式
vi 编辑器有两种操作模式:
命令模式
在命令模式中,可以在文件中移动并执行编辑操作,比如搜索文本、删除文本、修改文本等等。常常以命令模式启动。
插入模式
在插入模式中,在插入点上将新文本输入文件。要返回命令模式,按下 Esc 键。
这两个模式决定了编辑器的行为。在开发 vi 的时候,并不是所有的终端键盘上都有光标移动键,所以在 vi 中可以做的所有事情都可以使用标准打字机上的键加上 Esc 和 Insert 键来完成。但是,可以将 vi 配置为使用额外的键(如果这些键可用的话);键盘上的大多数键在 vi 中都有作用。vi 是在早期的终端连接时代开发的,所以 vi 使用的命令非常短,因此命令的含义比较含混。
离开 vi
在学习新编辑器时,我喜欢先了解如何退出它,以免意外退出。下面这些退出 vi 的方式包括保存或放弃修改,或者从头重新开始。如果这些命令看起来无效,那么您可能是在插入模式中,所以要按 Esc 离开插入模式并返回命令模式。
:q!
退出文件编辑并放弃所有修改。这是摆脱麻烦的常用方法。
:w!
写文件(无论是否修改了)。尝试覆盖现有文件、只读文件或其他不可写文件。可以提供一个文件名参数,编辑的结果将写到这个文件而不是原来的文件。一般来说,去掉 ! 比较安全,除非您知道自己正在做什么。
ZZ
如果文件已经修改了,就写文件,然后退出。这是正常退出 vi 的常用方法。
:e!
编辑文件的当前磁盘副本。这会重新装载文件,放弃已经做的修改。如果磁盘副本由于某些其他原因改变了,而您希望获得最新版本,那么可以使用这个命令。
:!
运行 shell 命令。输入命令并按 Enter。当命令完成时,会看到输出以及返回 vi 编辑的提示。
注意:
在输入冒号(:)时,光标将移动到屏幕底部,在这里输入命令和任何参数。
如果从上面的命令中去掉惊叹号,就可能收到一个错误消息,比如指出修改还未保存或无法写输出文件(例如,正在编辑一个只读文件)。
: 命令有更长的形式(:quit、:write、:edit),但是很少使用长形式。
移动
以下命令用于在文件中到处移动:
h
在当前行向左移动一个字符
j
移动到下一行
k
移动到上一行
l
在当前行向右移动一个字符
w
移动到当前行上的下一个单词
e
移动到当前行上的下一个单词末尾
b
移动到当前行上的前一个单词开头
Ctrl-f
向前滚动一页
Ctrl-b
向后滚动一页
如果在这些命令前面输入一个数字,那么命令将重复执行这个数字指定的次数。这个次数称为重复计数,或简称为计数。例如,5h 将向左移动 5 个字符。对于许多 vi 命令都可以使用重复计数。
移动到行
以下命令用于移动到文件中的特定行:
G
移动到文件中的一个特定行。例如,3G 移动到第 3 行。如果没有参数,G 就移动到文件的最后一行。
H
相对于屏幕上的顶行进行移动。例如,3H 移动到从当前屏幕顶行开始的第 3 行。
L
这与 H 相似,但是移动相对于屏幕的最后一行。所以,2L 移动到从屏幕最后一行开始的第 2 行。
搜索
可以使用正则表达式搜索文件中的文本:
/
使用 / 后面跟着一个正则表达式,在文件中向前搜索。
?
使用 ? 后面跟着一个正则表达式,在文件中向后搜索。
n
使用 n 以任意方向重复上一次搜索。
可以在上面的任何搜索命令前面加上一个数字,表示重复计数。所以,3/x 将搜索从当前点开始的第 3 个 x,这相当于 /x 后面跟着 2n。
修改文本
使用以下命令插入、删除或修改文本:
i
在当前位置的字符前面进入插入模式。输入文本并按 Esc 返回命令模式。使用 I 在当前行的开头进行插入。
a
在当前位置的字符后面进入插入模式。输入文本并按 Esc 返回命令模式。使用 A 在当前行的末尾进行插入。
c
使用 c 修改当前字符并进入插入模式以输入替换字符。
o
在当前行下面打开一个新行来进行文本插入。使用 O 在当前行上面打开一个新行。
cw
删除当前单词的剩余部分并进入插入模式以替换它。使用重复计数替换多个单词。使用 c$ 一直替换到行末。
dw
与上面的 cw(和 c$)一样,但是不进入插入模式。
dd
删除当前行。使用重复计数删除多行。
x
删除光标位置的字符。使用重复计数删除多个字符。
p
将最后删除的文本放在当前字符的后面。使用 P 将它放在当前字符的前面。
xp
x 和 p 的组合是一种有用的命令。这个命令将光标位置的字符与它右边的字符对换。
应用这些操作
我们打算在 count1.sh 文件中添加一行。为了保留原来的文件并将修改的版本保存为 count2.sh,可以在用 vi 打开文件之后,使用下面这些 vi 命令。注意,<Esc> 表示按 Esc 键。


清单 116. 在 count1.sh 中添加一行的编辑器命令




1G
O
sleep 20<Esc>
:w! count2.sh
:q


会者不难,是吧?

0 0
原创粉丝点击