分类: BSD
2008-12-23 16:13:29
图 3-3
在画面最上方有使用说明,几乎我们所有的会使用到的功能都在最上方的说明中。您可以使用上下左右键来移动游标,并直接输入内容,以下为 ee 的指令说明,请注意我们将键盘上独立的按键以小于及大于的符号括起来,例如
按键 | 意义 |
显示主选单。 | |
输入 ASCII code,例如输入 65 就会显示 A。 | |
跳到档案结尾。 | |
跳到档案开头。 | |
输入指令。在按了 Ctrl+c 后,上方选单会出现命令说明,例如您可以直接输入数字,表示将光标移到某一行。 | |
搜寻。按了 Ctrl+y 之后,你可以输入欲搜寻的字符串。如果要搜寻下一个该字符串,只要再按 Ctrl+x 即可。预设的搜寻是不分大小写的,如果要区分大小写,您可以按 Ctrl+c 并输入 case 即可。如果要取消只要再按 Ctrl+c 并输入 nocase。 | |
跳到行首。 | |
跳到行尾。 | |
删除光标所在位置的字符。 | |
贴上上一次所删除的字符。 | |
删除光标所在位置的一整行。 | |
贴上上一次删除的一整行内容。 | |
删除一个字。 | |
贴上上一次所删除的字。 | |
将光标移到上一行。 | |
将光标移到下一行。 | |
将光标移到上一个字,和方向键左键一样。 | |
将光标移到下一个字,和方向键右键一样。 | |
下一页。 | |
上一页。 | |
移到下一个字。 | |
离开 ee。如果档案有修改过,它会问您是否要储存档案。 |
当我们按了
Vi 的使用
Vi 已经是 Unix 系统中标准的文字编辑器, 每个网管人员都必须熟悉它, 因为你会在维护系统时常常遇到它.
Vi 对初学者而言, 第一印象总是不好, 觉得它难用. 其实, 大家在用惯了办公室软件之后, 再回过头来用这些未见过的怪物, 难免无法适应, 这是很正常的. 但别忘了, 各位都将是学校中重要网管的人员,您的角色不再是纯粹的使用者, 而是一位面对复杂网络的管理者及问题解决者, 你必须能够亲手操控你的系统, 设定你的系统, 调整你的系统, 而这个过程, 你就不得不去面对 Vi.
不要拿 Word 的使用习惯来挑剔 Vi, 它们的作用方向不同, 风格也不同, 一旦您能上手, 也许你会喜欢上它. Vi 是网络管理人员的标准左右手.
So, 打开你的心, 接受会比反弹更有收获.
二. 开启档案, 关闭档案
vi 檔名 开启档案
: 进入命令列的方法
q 离开 (命令列)
wq 存盘然后离开 (命令列)
q! 放弃存盘, 强迫离开 (命令列)
ZZ 存盘然后离开 (不在命令列使用)
:e 檔名 在 Vi 中开启档案
三. Vi 的操作模式:
Vi 有二种主要的操作模式, ESC 键为单向的切换键(由本文输入模式回到编辑命令模式)
编辑命令模式 : 要 vi 做一些特定目的的动作. 如插入,附加,取代,修改,删除,移动光标,搜寻等等. 若是存盘等动作, 则需在命令列中下达, 欲切换至命令列, 需先按 :
本文输入模式 : 在此模式下, 任何字符, 皆被视为输入的数据.
一开始进入 Vi 之后, 即进入编辑命令模式, 你输入的每一个字符, 皆被预视为一个指令. 有效的指令会被接受, 若是无效的指令, 会产生 beep beep 声, 以示警告.
若想做输入的动作, 必须切换为本文输入模式, 切换的方法, 只要单按一个特殊意义的字符键即可, 如下所示:
按 i 或 I 插入状态
按 a 或 A 附加状态
按 R 取代状态R 会进行连续字符取代
按 s 或 S 删除一个字符;删除光标所在那一列
按 cw, c2b, c$, c0 修改状态
按 o 或 O 新增空白列
你不必一下子全用上, 只要会 i, a, o 这个三个模式即可胜任愉快, 因为大部份时候, 你也只用这三个.
OK, 现在你可以试着在本文输入模式下, 键入一些资料看看. 然后, 按 ESC 切换回编辑命令模式.
四. 移动光标:
Vi 为了适用于各种不同的终端机模式, 因此以字键的方式来操控光标.
k j h l 上 下 左 右
Enter 换列
w b 往前一个 word ; 倒退一个 word
0 $ 至该列开头 ; 至该列尾端
+ - 往下一列; 往上一列
请记住一个要诀:
在 Vi 中, 大部份的命令都可以在其前面加上数字, 该数字表示重复该命令的次数.
例如: 8l 表示往右移动 8 个字符, 3w 表示往前移动三个 word, 2b 表示倒退 2 个 word
注: word 的定义, 连续英数字元形成一个 word, 而其它特殊符号则每一个字符便是一个 word(除非连续特殊字符), 例如: --classify 中含有 2 个 word, 一个是 -- ; 一个是 classify
而 -x, 则有 3 个 word.
在特殊的终端机模式下, 方向键也是可以使用的. 如 linux 或 vt100.
其实大部份时候, 你仍可以保有使用方向键的习惯. 但大概只有 local 下才能使用 PgUp , PgDn, End, Home 等键喔!
不过, 若你所使用的终端机模式不支持方向键, 那么上表中的按键, 就相当重要了.
五. 卷页:
^f 往下一页 (forward)
^b 往上一页 (before)
^d 往下半个屏幕(down)
^u 往上半个屏幕(up)
六. 跳列:
你可以指定跳至某一列位置. 跳动之前, 先查看一下目前所在列数是多少.
^g 可以显示目前的位置, 如: "ls.txt" line 53 of 264 --20%-- col 16-23
上面表示, 目前是在第 53 列, 全部共有 264 列, 占该档百分之20的位置, 目前的光标, 实际是在第23行, 但只算成第16行, 因为中间有使用 tab 键.
80G 或 80gg 跳至第 80 列
G 跳至文件尾
gg 跳至文件头
七. 删除: (但不会进入本文输入模式)
x 删除一个字符
dd 删除一行
r 取代一个字符
以上皆针对光标目前的所在位置产生作用.
还有 dw, db, de, d0, d$ 等命令, 但你不须一下子全用上. 上表中这三个够用了.
记住一个要诀: Vi 的命令繁多, 但你真正用上手的不必多, 而且这些也就够了.
八. undo (回复动作):
若你对上一个动作反悔了, 可以使用 undo 的功能:
u 取消上一个动作所产生的改变
U 取消光标所在那一列所有的改变
:e! 取消所有的改变, 回复至未修改之前
九. 关键词搜寻/取代:
/ 关键词 往下搜寻关键词
? 关键词 往上搜寻关键词
n 重复搜寻命令(不管往下或往上)
N 和 n 相反方向
cw字符串 以该字符串取代原有的关键词
n. 继续取代该字符串的动作
%s/目标/取代/g 将目标字符串全换成取代字符串
十. 选取、复制与搬移:
Y 或 yy 选取光标所在那一列
5Y 或 5yy 选取光标列所在共5列(5 只是一个例子, 可改用其它数字)
p 将选取的内容, 复制至光标之后
P 将选取的内容, 复制至光标之前
cw, x, dd 等删除命令 会将被删除的内容放入 buffer 中, 配合 p 或 P 即可做出搬移的效果.
十一. 暂时跳出 Vi:
在编辑过程中, 你可能想要执行其它命令, 方法如下:
:! 命令 执行该令命
:sh 暂时跳出 Vi, 欲回 Vi 按 ^d 或 exit
vI技巧:
还可以,个人以前一直觉得快copy麻烦,一直懒惰...今天无意中发现了,就贴过来了^_^
如何用vi 复制第5行到第10行并粘贴到第12行之后?
方法1:
光标放到第五行,
输入:y6y
光标放到第12行,
输入:p
方法2:
命令行模式下输入
:5,10 co 12
方法3:
我一般都是
先移到第五行 d6
p
再移到12行
p
延伸一下, 有时候不想费劲看多少行或复制大量行时,可以使用标签来替代
光标移到起始行,输入ma
光标移到结束行,输入mb
光标移到粘贴行,输入mc
然后 :'a,'b co 'c
把 co 改成 m 就成剪切了
那删除呢
是不是5,10 de
刚才试了试,的确可以
也可以把大量的代码保存到一个文件,然后在另一个文件里打开需要拷贝的代码。
在文件一:
光标移到起始行,输入ma
光标移到结束行,输入mb
然后:'a, 'b w filename
在文件二:
光标移到需要赋值的行,输入:
:r filename
行拷贝还有一个比较简单的方法:
操作如下:
找到要复制的行,键盘按下shift+v, 然后用方向键上下或j h 移动想要copy的行,然后按下y
在移动到目的行,按下p即完成拷贝多行。这种方法适合没有行号的多行copy。
Vi 提供了文本移动和复制命令,用户利用这些指令可以方便的复制字符、文字、行还有文本块。
有关的命令如下:
yy 将当前行复制到缓冲区
yw 将当前单词复制到缓冲区
y1 将光标处的一个字符复制到缓冲区
p 将缓冲区的信息粘贴到光标的后面
:行号1 ,行号2 copy 行号3 将行号1到行号2的内容复制到行号3所在行的后面。
:行号1 ,行号2 move 行号3 将行号1到行号2的文本内容移动到行号3所在行的后面
: ranges /pat1/pat2/g 其中 : 这是Vi的命令执行界面。 range 是命令执行范围的指定: 百分号(%)表示所有行 点(.)表示当前行 美元($)表示最末行 例如: 10,20表示第10到20行, .,$表示当前行到最后一行,. +2,$-5表示当前行后两行直到全文的倒数第五行 s 表示其后是一个替换命令。 pat1 这是要查找的一个正则表达式 pat2 这是希望把匹配串变成的模式的正则表达式 g 可选标志,带这个标志表示替换将针对行中每个匹配的串进行,否则则只替换行中第一个匹配串。 :/string #向下查找 :?stirng # 向上查找 替换 :s/pattern1/pattern2/g 把光标当前行的pattern1替换为pattern2 :%s/pattern1/pattern2/g 把所有行的pattern1替换为pattern2 :g/parttern1/s//parttern2 把所有行的pattern1替换为pattern2 :num1,num2 s/pattern1/pattern2/g 把num1到num2的partten1替换为partten2 被替换的文字用^表示行首,$表示行尾,如:%s/^/111/g就表示在每一行的行首插入111 文件 :r filename 把文件filename的内容粘贴在光标以下行 :w 保存当前编辑的文件名 :w filename 当filename不存在时,把修改后的文件存为文件filename ,当文件filename 存在时,报错。 !w filename 如果文件filename存在时,把修改后的文件保存为文件filename :q 退出vi ,若文件被修改,系统不会让用户使用q命令退出 q! 不保存退出 x 保存退出 wq 保存退出 在多个文件之间切换 :n开始编辑vi激活的文件列表中的下一个文件 :n filenames 指定将被编辑的新的文件列表 在当前文件和另外一个文件间切换: :e filename 使用filename激活vi(在vi中装入另一个文件filename) e! 重新装入当前文件,若当前文件有改动,则丢弃以前的改动 :e+filename 使用filename激活vi ,并从文件尾部开始编辑 :e+number filename 使用filename激活vi ,并在第number行开始编辑 :e# 开始编辑另外一个文件 查找 /pattern 向后寻找指定的pattern ,若遇到文件尾,则从头再开始。 ?pattern 向前寻找指定的pattern ,若遇到文件头,则从尾再开始。 n 在上次指定的方向上,再次执行上次定义的查找。 N 在上次指定的方向的相反方向上,再次执行上次定义的查找。 /pattern/+number 将光标停在包含pattern的行后面第number行上。 /pattern/-number 将光标停在包含pattern的行前面第number行上。 % 移到匹配的"()"或"{}"上。 选项设置 all 列出所有选项设置情况 term 设置终端类型 ignorance 在搜索中忽略大小写 list 显示制表位(Ctrl+I)和行尾标志($) number 显示行号 report 显示由面向行的命令修改过的数目 terse 显示简短的警告信息 warn 在转到别的文件时若没保存当前文件则显示NO write信息 nomagic 允许在搜索模式中,使用前面不带“\”的特殊字符 nowrapscan 禁止vi在搜索到达文件两端时,又从另一端开始 mesg 允许vi显示其他用户用write写到自己终端上的信息 、在vi中使用的查找替换方法 利用 :s 命令可以实现字符串的替换。具体的用法包括: :s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串str1 :s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串str1 :.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串str1 :1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串str1 :g/str1/s//str2/g 功能同上从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。 2、在shell中使用find结合grep进行文件的替换 # find ./ -exec grep str1 ‘{}’ \; -exec sed -i.bak s/str1/str2/g ‘{}’ \; 上面命令可以在当前目录下(包括子目录)查找包含str1的文件,自动替换成str2,并且生成源文件的bak文件。 |