vi的简单使用
笔记已经上传到百度文库:
一 .vi 介绍
vi 已经是 Unix 系统中标准的文字编辑器 , 每个网管人员都必须熟悉它 , 因为你会在维护系统时常常遇到它 .
vi 对初学者而言 , 第一印象总是不好 , 觉得它难用 . 其实 , 大家在用惯了办公室软件之后 , 再回过头来用这些未见过的怪物 , 难免无法适应 , 这是很正常的 . 但别忘了 , 各位都将是学校中重要网管的人员 , 您的角色不再是纯粹的使用者 , 而是一位面对复杂网络的管理者及问题解决者 , 你必须能够亲手操控你的系统 , 设定你的系统 , 调整你的系统 , 而这个过程 , 你就不得不去面对 vi.
不要拿 Word 的使用习惯来挑剔 vi, 它们的作用方向不同 , 风格也不同 , 一旦您能上手 , 也许你会喜欢上它 .vi 是网络管理人员的标准左右手 .
So, 打开你的心 , 接受会比反弹更有收获 .
二 . 开启文件 , 关闭文件
vi 文件名 开启文件
: 进入命令行的方法
q 离开 ( 命令行 )
wq 存盘然后离开 ( 命令行 )
q! 放弃存盘 , 强迫离开 ( 命令行 )
ZZ 存盘然后离开 ( 不在命令行使用 )
:e 檔名在 vi 中开启文件
三 .vi 的操作模式 :
vi 有二种主要的操作模式 ,ESC 键为单向的切换键 ( 由本文输入模式回到编辑命令模式 )
编辑命令模式 : 要 vi 做一些特定目的的动作 . 如插入 , 附加 , 取代 , 修改 , 删除 , 移动光标 , 搜寻等等 . 若是存盘等动作 , 则需在命令行中下达 , 欲切换至命令行 , 需先按 :
本文输入模式 : 在此模式下 , 任何字符 , 皆被视为输入的数据 .
一开始进入 vi 之后 , 即进入编辑命令模式 , 你输入的每一个字符 , 皆被预视为一个指令 . 有效的指令会被接受 , 若是无效的指令 , 会产生 beepbeep 声 , 以示警告 .
若想做输入的动作 , 必须切换为本文输入模式 , 切换的方法 , 只要单按一个特殊意义的字符键即可 , 如下所示 :
按 i 或 I 插入状态
按 a 或 A 附加状态
按 R 取代状态 R 会进行连续字符取代
按 s 或 S 删除一个字符 ; 删除光标所在那一列
按 cw,c2b, c$, c0 修改状态
按 o 或 O 新增空白列
你不必一下子全用上 , 只要会 i,a, o 这个三个模式即可胜任愉快 , 因为大部份时候 , 你也只用这三个 .
OK, 现在你可以试着在本文输入模式下 , 键入一些资料看看 . 然后 , 按 ESC 切换回编辑命令模式 .
四 . 移动光标 :
vi 为了适用于各种不同的终端机模式 , 因此以字键的方式来操控光标 .
kj h l 上下左右
Enter 换列
wb 往前一个 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 技巧 =====================##
vi 技巧 :
shift+ a 移到本行尾并编辑
gg 跳到文首
G 跳到文尾
0 跳到行首
$ 跳到行尾
w 跳到下一个 word
ndw 或 ndW 删除光标处开始及其后的 n-1 个字符。
d0 删至行首。
d$ 删至行尾。
ndd 删除当前行及其后 n-1 行。
x 或 X 删除一个字符。
Ctrl+u 删除输入方式下所输入的文本。
^R 恢复 u 的操作
J 把下一行合并到当前行尾
V 选择一行
^V 按下 ^V 后即可进行矩形的选择了
aw 选择单词
iw 内部单词 ( 无空格 )
as 选择句子
is 选择句子 ( 无空格 )
ap 选择段落
ip 选择段落 ( 无空格 )
D 删除到行尾
x,y 删除与复制包含高亮区
dl 删除当前字符(与 x 命令功能相同)
d0 删除到某一行的开始位置
d^ 删除到某一行的第一个字符位置(不包括空格或 TAB 字符)
dw 删除到某个单词的结尾位置
d3w 删除到第三个单词的结尾位置
db 删除到某个单词的开始位置
dW 删除到某个以空格作为分隔符的单词的结尾位置
dB 删除到某个以空格作为分隔符的单词的开始位置
d7B 删除到前面 7 个以空格作为分隔符的单词的开始位置
d )删除到某个语句的结尾位置
d4 )删除到第四个语句的结尾位置
d (删除到某个语句的开始位置
d )删除到某个段落的结尾位置
d{ 删除到某个段落的开始位置
d7{ 删除到当前段落起始位置之前的第 7 个段落位置
dd 删除当前行
d/text 删除从文本中出现“ text” 中所指定字样的位置,
一直向前直到下一个该字样所出现的位置(但不包括该字样)之间的内容
dfc 删除从文本中出现字符“ c” 的位置,一直向前直到下一个该字符所出现的位置(包括该字符)之间的内容
dtc 删除当前行直到下一个字符“ c” 所出现位置之间的内容
D 删除到某一行的结尾
d$ 删除到某一行的结尾
5dd 删除从当前行所开始的 5 行内容
dL 删除直到屏幕上最后一行的内容
dH 删除直到屏幕上第一行的内容
dG 删除直到工作缓存区结尾的内容
d1G 删除直到工作缓存区开始的内容
/ 查找
n 查找下一个
N 查找上一个
setnumber 显示行号
setmouse=a 显示鼠标
setts=4 设置 tablespace 是 4 个字符,默认为 8 个
setautoindent 可以自动缩进
还可以 , 个人以前一直觉得快 copy 麻烦 , 一直懒惰 ... 今天无意中发现了 , 就贴过来了 ^_^
如何用 vi 复制第 5 行到第 10 行并粘贴到第 12 行之后?
方法 1 :
光标放到第五行,
输入: y6y
光标放到第 12 行,
输入: p
方法 2 :
命令行模式下输入
:5,10co 12
方法 3 :
我一般都是
先移到第五行 d6
p
再移到 12 行
p
延伸一下 , 有时候不想费劲看多少行或复制大量行时,可以使用标签来替代
光标移到起始行,输入 ma
光标移到结束行,输入 mb
光标移到粘贴行,输入 mc
然后 :'a,'bco 'c
把 co 改成 m 就成剪切了
那删除呢
是不是 5,10de
刚才试了试,的确可以
也可以把大量的代码保存到一个文件,然后在另一个文件里打开需要拷贝的代码。
在文件一:
光标移到起始行,输入 ma
光标移到结束行,输入 mb
然后 :'a,'b w filename
在文件二:
光标移到需要赋值的行,输入:
:rfilename
行拷贝还有一个比较简单的方法:
操作如下:
找到要复制的行,键盘按下 shift+v ,然后用方向键上下或 jh 移动想要 copy 的行,然后按下 y
在移动到目的行,按下 p 即完成拷贝多行。这种方法适合没有行号的多行 copy 。
vi 提供了文本移动和复制命令,用户利用这些指令可以方便的复制字符、文字、行还有文本块。
有关的命令如下:
yy 将当前行复制到缓冲区
yw 将当前单词复制到缓冲区
y1 将光标处的一个字符复制到缓冲区
p 将缓冲区的信息粘贴到光标的后面
:行号 1 ,行号 2copy 行号 3 将行号 1 到行号 2 的内容复制到行号 3 所在行的后面。
:行号 1 ,行号 2move 行号 3 将行号 1 到行号 2 的文本内容移动到行号 3 所在行的后面
笔记已经上传到百度文库: