vi编辑器由加州大学伯克利分校,Bill Joy 研究开发。其是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器。对Unix及Linux系统的任何版本,vi编辑器是完全相同的,其是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻
文本编辑器有很多,比如图形模式的gedit、kwrite、OpenOffice,文本模式下的编辑器有vi、vim(vi的增强版本)。vi和vim是我们在Linux中最常用的编辑器。vi或vim虽然没有图形界面编辑器那样点鼠标的简单操作,但vi编辑器在系统管理、服务器管理字符界面中,永远不是图形界面的编辑器能比的。
vi常用命令
vi是unix/linux操作系统中最经典的文本编辑器,只能是编辑字符,不能对自体、段落进行排版;它既可以新建文件,也可以编辑文件;他没有菜单,只有命令,且命令繁多。vi的操作方式与其他常用的文本编辑器(如gedit)很不相同 ,但其运行于字符界面,可用于所有unix/linux环境
三种模式
基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
1) 命令行模式command mode)
命令模式是启动vi后进入的工作模式,并可转换为文本编辑模式和最后行模式。在命令模式下,从键盘上输入的任何字符都被当作编辑命令来解释,而不会在屏幕上显示。如果输入的字符是合法的vi命令,则vi就会完成相应的动作;否则vi会响铃警告。
2) 插入模式(Insert mode)
文本编辑模式用于字符编辑。在命令模式下输入i(插入命令)、a(附加命令)等命令后进入文本编辑模式,此时输入的任何字符都被vi当作文件内容显示在屏幕上。按Esc键可从文本编辑模式返回到命令模式。
3) 底行模式(last line mode)
在命令模式下,按“:”键进入最后行模式,此时vi会在屏幕的底部显示“:”符号年作为最后行模式的提示符,等待用户输入相关命令。命令执行完毕后,vi自动回到命令模式。
为了实现跨平台操作兼容不同类型的键盘,在vi编辑器中无论是输入命令还是输入内容都是用字母键。例如按字母键“i”在文本编辑模式下表示输入字母“i”,如果在命令模式下则表示将工作模式转换为文本编辑模式。
为了实现跨平台操作兼容不同类型的键盘,在vi编辑器中无论是输入命令还是输入内容都是用字母键。例如按字母键“i”在文本编辑模式下表示输入字母“i”,如果在命令模式下则表示将工作模式转换为文本编辑模式。
一般我们在使用时把vi简化成两个模式,就是将底行模式(last line mode)也算入命令行模式command mode)。
命令类型:
进入输入模式命令
i插入命令 a附加命令 o打开命令 c修改命令 r取代命令 s替换命令 Esc退出命令
命令类型:
进入输入模式命令
i插入命令 a附加命令 o打开命令 c修改命令 r取代命令 s替换命令 Esc退出命令
基本操作及相关命令:
a) 进入vi在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面:vi myfile不过有一点要特别注意,就是您进入vi之后,是处于命令行模式(command mode),您要切换到插入模式(Insert mode)才能够输入文字。b) 切换至插入模式(Insert mode)编辑文件
按下列字符可进行相关的操作
i 在光标之前插入a 在光标之后插入I 在光标所在行的行首插入A 在光标所在行的行末插入o 在光标所在的行的下面插入一行O 在光标所在的行的上面插入一行s 用输入的文本替换光标所在字符S 用输入的文本替换光标所在行
c) 从插入模式切换为命令行模式按“ESC”
d)光标移动当我们按ESC进入Command模式后,我们可以用下面的一些键位来移动光标;
输入模式的操作
Home光标到行首
End 光标到行尾
Page Up和Page Down上下翻页
Delect删除光标位置的字符
Home光标到行首
End 光标到行尾
Page Up和Page Down上下翻页
Delect删除光标位置的字符
j 向下移动一行k 向上移动一行h 向左移动一个字符l 向右移动一个字符ctrl+b 向上移动一屏ctrl+f 向下移动一屏
ctrl+u 向下移动半屏
ctrl+d 向上移动一屏
向上箭头 向上移动向下箭头 向下移动向左箭头 向左移动向右箭头 向右移动我们编辑一个文件时,对于 j、k、l和h键,还能在这些动作命令的前面加上数字,比如 3j,表示向下移动3行。
gg 移动到文章的开始处
$ 移动到光标所在行的"行尾"。^ 移动到光标所在行的"行首"w 光标跳到下个字的开头e 光标跳到下个字的字尾b 光标回到上个字的开头#l 光标移到该行的第#个位置,如:5l,56l
e)删除文字
首先移动光标选定内容
x 删除一个字符#x 删除几个字符,#表示数字,比如3xdw 删除一个单词#dw 删除几个单词,#用数字表示,比如3dw表示删除三个单词dd 删除一行;#dd 删除多个行,#代表数字,比如3dd 表示删除光标行及光标的下两行d$ 删除光标到行尾的内容J 清除光标所处的行与下一行之间的换行,行尾没有空格的话会自动添加一个空格。#J 表示合并#(数字)行。
f)复制粘贴操作
首先移动光标选定内容
yy 复制当前整行的内容到vi缓冲区yw 复制当前光标所在位置到单词尾字符的内容到vi缓存区,相当于复制一个单词y$ 复制光标所在位置到行尾内容到缓存区y^ 复制光标所在位置到行首内容到缓存区#yy 例如:5yy就是复制5行#yw 例如:2yw就是复制两个单词如果要复制第m行到第n行之间的内容,可以在末行模式中输入m,ny例如:3,5y复制第三行到第五行内容到缓存区。
p 将缓冲区内的字符贴到光标所在位置。注意:所有与"y"有关的复制命令都必须与"p"配合才能完成复制与粘贴功能。
g)查找和替换vi的查找和替换功能主要在末行模式完成:
至上而下的查找/ word 其中/代表从光标所在位置起开始查找,word为要查找的字符串,例如:/ work至下而上的查找?word word为要查找的字符串,例如:? work替换:s/old/new用new替换行中首次出现的old: s/old/new/g 用new替换行中所有出现的old:#,# s/old/new/g用new替换从第#行到第#行中出现的old:% s/old/new/g用new替换整篇中出现的oldi) 退出vi及保存文件在命令行模式(command mode)下,按一下 ":“ 冒号键进入「Last line mode」
:w 保存
:w filename 将文章以指定的文件名filename保存
: wq 存盘并退出vi
:wq filename 以filename为文件名保存后退出
: q (输入q, 不存盘强制退出vi)
:x 保存并退出 ,功能和:wq相同
注:(1)如果在只读模式下打开文档,那么执行以上操作时需在相应的命令后加“!”,如:w!、:wq!、:q!;
(2)以上命令中的“:”均需在英文输入法下输入。
j)打开多个文件
在同一编辑窗打开第二个文件,用:sp [filename]
在多个编辑文件之间切换,用Ctrl+w
注:打开多个文件后对每个文件的操作和打开单个文件时相同
k)恢复文件
vi在编辑某一个文件时,会生成一个临时文件,这个文件以“ .” 开头并以 “.swp”结尾。正常退出该文件自删除,如果意外退出例如忽然断电,该文件不会删除,我们在下次编辑时可以选择一下命令处理:
O只读打开,不改变文件内容
E继续编辑文件,不恢复.swp文件保存的内容
R将恢复上次编辑以后未保存文件内容
Q退出vi
D删除.swp文件
或者使用vi -r 文件名来恢复未保存的内容