3.1 vi工具
3.1.1 vi简介
VI 编辑器是Visual interface的简称,通常称之为VI。VI 编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下。它在Linux上的地位就像Edit程序在DOS上一样。由于不需要图形界面,使它成了效率很高的文本编辑器。尽管在Linux上也有很多图形界面的编辑器可用,比如Gedit, Kate等。但VI在系统和服务器管理中的作用是那些图形编辑器所无法比拟的,更重要的很多服务器是不安装图形环境的。
VI编辑器可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。VI 编辑器并不是一个排版程序,它不像Word或WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文本编辑程序。没有菜单,只有命令,且命令繁多。
在linux、Unix系统中还有一种VI的加强版VIM编辑器,VI的命令几乎都可以在VIM编辑器上使用。
3.1.2 进入退出vi
Vi有两种工作模式:
命令模式 用来控制vi进行特殊操作的一种模式,例如控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入文本输入模式的命令等。在命令模式下是不能够在被编辑的文档中输入任何字符的。
输入模式 用来在文件中输入字符的一种模式,只有在这种模式下才能够在被编辑的文档中输入字符。 在输入模式下按[Esc]键可以切换到命令模式。
进入vi 在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面:
[root@localhost root]#vi filename
不过有一点要特别注意,就是您首次进入vi之后,是处于命令行模式,您要切换到输入模式才能够输入文字。初次使用vi的人都会想先用上下左右键移动光标或鼠标移动光标,然后输入字符,发现有时能输入,有时不能输入,那是因为有时按的是进入到输入模式的命令,所以能够输入字符,当按的不是进入输入模式的命令时就不能输入字符。
命令模式->输入模式,你可以使用如下命令:
i 按[i]是从光标当前位置开始输入字符。
a 按[a]是从光标所在位置的下一个位置开始输入字符。
o 按[o]是在光标的下一行插入新的一行,从行首开始输入文字。
I 按[I]是从光标所在行的行首开始输入字符。
A 按[A]是从光标所在行的行尾开始输入字符。
O 按[O]是在光标的上一行插入新的一行,从行首开始输入文字。
图 3-1 进入vi输入模式
退出vi 在输入模式按[Esc]键回到命令模式,在命令模式按一下[:]冒号键,然后输入下例命令退出vi。
: w filename 将文件以指定的文件名filename保存
: wq 存盘并退出vi。
: q! 不存盘强制退出vi。
或在命令模式下直接按ZZ保存退出。
图 3-2 退出vi
3.1.3 常用vi命令
1. 光标控制命令
【字移动】
w:光标跳到下个字的开头。
b:光标回到上个字的开头。
【行移动】
^或0 :光标移至行首。
$ :光标移至行尾。
) :光标移至句尾。
( :光标移至句首。
nG: 光标移至第 n 行首。
n+: 光标下移 n 行。
n 回车:输入一个数字n,再按回车键,光标就会下移n行。
n-: 光标上移 n 行。
【段移动】
Ctrl+f :光标移至下页。
Ctrl+b:光标移至上页。
} :光标移至段落开头。
{ :光标移至段落结尾。
H :光标移至屏幕顶。
M :光标移至屏幕中。
L :光标移至屏幕后。
gg:光标移动到文章的开头。
G:光标移动到文章的最后。
2. 文本编辑命令
【增加】
i: 从光标当前位置开始输入字符。
a: 从光标所在位置的下一个位置开始输入字符。
o: 在光标的下一行插入新的一行,从行首开始输入文字。
I: 从光标所在行的行首开始输入字符。
A: 从光标所在行的行尾开始输入字符。
O: 在光标的上一行插入新的一行,从行首开始输入文字。
【删除】
x:删除光标所在位置的字符。
X:大写X,删除光标所在位置的前面一个字符。
dw:删除单词。
dd:删除行。
#dd:#代表数字,删除#行。
d0或d^: 删除光标到行首部分字符。
d$ 或shift+d : 删除光标到行尾部分字符。
d} :删除光标到段落开头。
d{ :删除光标到段落结尾。
:n1,n2 d 将 n1 行到 n2 行之间的内容删除。
图 3-3 删除粘帖
命令图解:将光标定位到第二行,按2dd则删除第二、三行,再将光标移到删除后的第四行按[p],则将二、三行删除并复制到“line six”行后面。
【修改】
r:替换字符。
R :替换当前字符及其后的字符,直至按ESC键。
s: 删除光标处字符并在当前位置开始输入字符。
cw:更改光标所在位置的一个字。
#cw:更改光标所在位置的#个字。
S、cc:删除光标所在行并在当前行首开始输入字符。
c$ 或 shift+c:删除光标到行尾部分字符,并开始输入字符。
J:把下一行合并到当前行尾。
u:撤销更改。
[ctrl]+r:恢复撤销的更改.
:n1,n2 m m3 将 n1 行到 n2 行之间的内容移至第 n3 行下。
图 3-4 移动操作
命令图解:将2行到3行的内容移到第6行的后面。
【查找】
[/关键字]:先按[/]键,再输入您想寻找的字符,从光标向下查找,如果第一次找的关键字不是您想要的,可以一直按[n]会往后寻找到您要的关键字为止。
[?关键字]:先按[?]键,再输入您想寻找的字符,从光标向上查找,如果第一次找的关键字不是您想要的,可以一直按[n]会往前寻找到您要的关键字为止。
%: 匹配当前(、[、{ 、}、] 、)的对应项。
:g/str 显示包含字符串str的行。
【复制】
yl:复制字符。
yw:复制单词。
yy:复制行。
y0: 复制光标到行首部分字符。
y$: 复制光标到行尾部分字符。
:n1,n2 co n3 将 n1 行到 n2 行之间的内容拷贝到第 n3 行下。
p:粘帖。
ddp:删除和粘贴综合使用,实现上下两行交换功能。
图 3-5 复制粘帖
命令图解:将19行到20行的内容复制到24行的后面。
【大小写转换】
gul 字符小写。
gUl 字符大写。
guw 字小写。
gUw 字大写。
guu 行小写。
gUU 行大写。
3. 书签
设置书签 在阅读和编写大的程序文件时,利用书签定位功能是十分有帮助的。将光标移到想做标记的位置。假如做一个名称为“a”的标记,那么用户可在命令模式下输入做标记的命令“ma”,一个名为“a”的书签就做好了。
定位书签 在命令模式下输入“`a”后,就能快速回到“a”的标记所在行的行首。
4. 选项设置
set list: 显示制表位(^I)和行尾标志($)。
set no list: 不显示制表位(^I)和行尾标志($)。
set nu,set number: 显示行号。
set nonu ,set nonumber: 不显示行号。
图 3-6 显示行号、制表符
5. 文件操作
:%!xxd 按十六进制查看当前文件。
:%!xxd -r 从十六进制返回正常模式。
:n1,n2 w filename 将 n1 行到 n2 行之间的内容保存到文件 filename 中。
6. 其它操作
:!shellcommand 执行linux命令。