在UNIX下,vi是标准的文本编辑器之一。几乎任何一部UNIX系统都把vi编辑器做为最最基本的“软件”而被默认组装在系统中。在PC-UNIX中,即便是选择最小程度安装的系统,vi编辑器也会被默认安装在系统中。
提到vi,就不得不提一下UNIX下另外一功能强大的编辑器 - Emacs 。好多人喜欢拿Emacs和vi来比较,但笔者认为,Emacs 和 vi 没有可比性。vi的轻量级特性,使得它成为系统管理方面的首选工具;而Emacs的功能强大的特性,使得它成为系统开发方面的首选工具。若是用Emacs 来作系统管理,它庞大的体积和对于系统资源的耗费(相对于vi),势必会影响系统管理的效率;然而,若是用vi来搞软件开发,它有些面向于开发的功能方面 的不完备,也势必会影响开发的灵活性。在这里,咱们的目标是创建和管理一台服务器,因此,咱们选择使用vi编辑器来完成服务器的配置工做。
因为本站全部服务器设置相关的修改工做,都是经过vi来完成的,因此准备经过本站介绍的各类方法构建服务器的话,请务必掌握vi的使用方法。不然将很难顺利的进行。若是您使用其它编辑器(好比Emacs)能够在安装过程当中或经过yum命令在线安装。服务器
习惯于Microsoft Windows下GUI方式编辑器的朋友,刚刚接触vi确定会有“排斥反应”的,这一点只能奉劝稍安毋躁……当你习惯于vi以后,你会发现它既精确又有秩序,并且重要的是它对于要编辑的对象极富针对性。

上图为在CUI下输入“vi”命令后,vi被启动的状态。
或者输入一个已存在的文件的路径,来打开一个已经存在的文本文件。(这里以用root用户登陆系统,后输入“vi /etc/X11/xorg.conf”为例。)

上图为用vi打开/etc/X11/xorg.conf后的状态。光标位于左上第一个字符下滑线的位置。
vi和其余编辑器最不同的地方莫过于它把编辑、处理等等的操做分离开来,造成性质不一样的3种操做模式,他们分别为“命令模式”、“插入模式”、“ex模式”。
在Windows下一般使用的记事本等等的编辑器在打开文件的时候,光标已经在处于输入等待的状态,也就是说,咱们打开文件时就能够对文件进行编辑。 好比,咱们要输入新的文本,或者复制一段文本,全部操做的前提,只要编辑器是被打开的状态,操做就是可能的。
但在vi下,为了加强对将要处理的文本的针对性,文本输入、复制等等不一样的操做,是被分离开来的,好比文本输入的模式叫作“插入模式”,在插入模式 下,咱们能够用和Windows下同样的操做方法来对文本进行输入、编辑等等的操做,可是复制等等非编辑的操做,在插入模式下不可以完成,而须要切换到相 应的模式下用相应的命令来完成。
在这里,仍是首先对重要的vi的模式进行说明。
★ vi的模式(命令模式、插入模式、ex模式)
1)命令模式:
在咱们刚刚经过vi新建或打开一个已经存在的文件时,首先默认被读取的模式就是“命令模式”,命令模式的特征就是,在编辑器窗口左下角的位置上没有任何的提示标语。

在这个模式下,若是不经过相应的命令,咱们没法输入新的文本到这个文件中。这里建议新接触刚刚接触vi的朋友在用vi打开一个文件时不要处于心切而乱 按键盘试图输入一些文本到文件中,由于命令模式所谓的“命令”,并非咱们在命令行提时下输入的过程诸如“ls -> 回车”等等形式的命令。确切说vi命令模式下的命令,只是计算机键盘上的某个按键或某些按键的组合,当咱们在命令模式下敲下键盘一个按键的时候,相应命令就已经被执行。
在这里,首先介绍移动光标的命令。一般光标的移动能够经过键盘右边的方向键,可是因为每次移动光标,手都要大幅度的移动到键盘右边,这样使用vi是体现不出效率的,因此建议使用vi固有的命令(键)来控制光标的移动。
光标的移动命令以下所示:
向右移动 --> l
向左移动 --> h
向下移动 --> j
向上移动 --> k
如上所示,例如要向右移动光标8个字符的距离,只要在键盘上敲 l 键8次便可;向下移动3行的距离,只要在键盘上敲 j 键3次便可……也就是说,在vi命令模式中经过这几个键(命令)来控制光标的移动。
其次就是文本删除的命令。在Windows下大多数编辑器在删除文本时只要连续按[Backspace]键便可。但因为在vi中,插入模式和命令模式是分离开来的,因此在命令模式下须要经过命令(按键)来删除文本,而不是直接按[Backspace]键。
文本删除的命令以下所示:
删除光标所在位置的字符 --> x
删除光标所在的行 --> dd(敲 d 两次)
如上所示,例如要删除从光标位置起向右的3个字符,只要在键盘上敲 x 键3次便可;要删除光标所在的行,只要敲 dd (连续敲d键两次),光标所在行的全部字符以及行将会被删除。
再次,当编辑完了一个文档,想要保存后退出的时候的命令为“ZZ”(大写、连续敲2次)。
保存并退出文档:
保存当前修改并退出 --> ZZ
另外,vi还有一些编辑性质的命令,一并总结以下
具备编辑性质的有用的命令:
撤销上一步操做 --> u
移动光标到行首 --> 0 (数字0)
移动光标到行末 --> $
移动光标到当前页最顶行 --> H
移动光标到当前页最底行 --> L
向前翻一页(Page Up) --> Ctrl + f
向后翻一页(Page Down) --> Ctrl + b
还有在服务器配置中使用vi时,频繁用到的就是vi的搜索功能。在vi命令行的状态下,键入“/”(斜 线)后,vi底部出现“/”,并处于输入等待状态,这时候输入要查找的文字或文字列,而后按回车就能够找到相应的文字或文字列。当有多个对象存在时,敲 “n”(小写)键为查找下一个目标,敲“N”为查找上一个目标。
vi是全部UNIX系统都会提供的屏幕编辑器,它提供了一个视窗设备,经过它能够编辑文件。固然,对UNIX系统略有所知的人,或多或少都以为vi超级难用,但vi是最基本的编辑器,学好了vi,之后在UNIX世界里必将畅行无阻、游刃有余,由于其余几种文本处理器并不是UNIX标准配备。若其它的Linux机器里没有安装joe或pico,若是不会使用vi,那可能就真的没辄了。
vi编辑器有3种模式:命令模式、输入模式、末行模式。掌握这三种模式十分重要:
命令模式:vi启动后默认进入的是命令模式,从这个模式使用命令能够切换到另外两种模式,同时不管在任何模式下只要按一下[Esc]键均可以返回命令模式。在命令模式中输入字母i或o或a,就能够进入vi的输入模式编辑文件。
输入模式:在这个模式中咱们能够编辑、修改、输入等编辑工做,在编辑器最后一行显示一个“--INSERT--”标志着vi进入了输入模式。当咱们完成修改输入等操做的时候咱们须要保存文件,这时咱们须要先返回命令模式,在进入末行模式保存。
末行模式:在命令模式输入“:”便可进入该模式,在末行模式中有好多好用的命令。
下面介绍vi经常使用的命令操做
进入输入模式命令
i 在光标 左侧输入正文[经常使用]
a 在光标 右侧输入正文[经常使用]
o 小写字符o, 在光标所在行的 下一行增添新行
O 大写字符O, 在光标所在行的 上一行增添新行
I 在光标 所在行的开头输入正文
A 在光标 所在行的末尾输入正文
上面介绍了几种切换到插入模式的简单方法。另外还有一些命令,它们容许在进入插入模式以前首先删去一段
正文,从而实现正文的替换。这些命令包括:
s 用输入的正文替换光标所指向的字符[经常使用]
ns 用输入的正文替换光标右侧n 个字符
cw 用输入的正文替换光标右侧的字 [经常使用]
ncw 用输入的正文替换光标右侧的n 个字
cb 用输入的正文替换光标左侧的字 [经常使用]
ncb 用输入的正文替换光标左侧的 n 个字
cd 用输入的正文替换光标的所在行[经常使用]
ncd 用输入的正文替换光标下面的n 行
c$ 用输入的正文替换从光标开始到本行末尾的全部字符[经常使用]
c0 用输入的正文替换从本行开头到光标的全部字符[经常使用]
r 取代光标所在处的字符, 好比c3 表示将光标所在处的字符替换为字符3 [经常使用]
R 取代字符直至按【ESC】为止
按【Esc】键或组合键【ctrl】+[ 退出输入模式
末行模式
w 保存文件 [经常使用]
w file 将当前文件的内容保存到file文件
wq 保存文件并退出vi编辑器[经常使用]
wq file 将 当前文件的内容写入file 文件,并保持原有文件的内容不变,而后退出vi编辑器(假如当前文件内容有变更但未执行保存操做,那么执行该命令后不会退出vi编辑器)
r file 读取file 文件的内容,插入当前光标所在行的后面
e file 关闭当前文件,并打开新文件file (若是当前文件内容有变更但未保存,则该命令不会被执行)[经常使用]
f file 将当前文件重命名为file [经常使用]
f 打印当前文件名称和状态,如文件的行数、光标所在的行号等
q 退出vi编辑器(若是当前文件有改动,则没法退出) [经常使用]
q! 强制退出vi编辑器(不保存修改)[经常使用]
# 将光标移到第#行[经常使用]
PS: 关于行号使用的一些技巧:
通常用数值来指定绝对行号;字符“.”表示光标所在行的行号;字符“$”表示文件最后一行的行号,例如:
.+5 将光标从当前行往下移动5 行
$ 将光标移到文件的最后一行
1 将光标移到文件的第一行
23w file 将文件的第23行写入file文件
3,5w file 将第3 行至第5 行写入file 文件
1,.w file 将第1 行至当前行写入file 文件
.,$w file 将当前行至最后一行写入file 文件
.,.+5w file 从当前行开始将6 行内容写入file 文件
1,$w file 将全部内容写入file 文件,至关于:w file 命令
移动光标的操做
【Home】 光标到行首
【End】 光标到行尾
【Page Up】 向上翻页
【Page Down】 向下翻页
【Delect】 删除光标位置的字符
【Ctrl】+ f 向前移动一页
【Ctrl】+ b 向后移动一页
h 光标向左移动一个字符 [经常使用]
j 光标向下移动一个字符 [经常使用]
k 光标向上移动一个字符 [经常使用]
l 光标向右移动一个字符 [经常使用]
数字0 把光标移到行尾 [ 经常使用]
$ 把光标移到行首 [ 经常使用]
G 把光标移到文件的末尾 [ 经常使用]
gg 把光标移到文件的开头 [ 经常使用]
w 把光标移到下一个单词的开头 [ 经常使用]
e 把光标移到当前或下一个单词的字尾 [ 经常使用]
b 把光标移到当前或下一个单词的开头 [ 经常使用]
^ 把光标移到该行的第一个非空白字符(tab,space) [ 经常使用]
:# 把光标移到该行的第#个位置,例如:3, :10 [ 经常使用]
) 光标移到句尾
( 光标移到句首
注: 句子用半角句号后加一个空格(. )分割
} 光标移到段落结尾
{ 光标移到段落开头
注: 段落以空行分割
nG 将光标定位到第n行的开头 [ 经常使用]
n+ 将光标下移n行
n- 将光标上移n行
n$ 将光标下移n行,并置于行尾
H 将光标置于当前屏幕的顶行
M 将光标置于当前屏幕的中间行
L 将光标置于屏幕的最后行
~ 改变当前字符的大小写 [ 经常使用]
>> 把当前行往右移动8个字符(至关于【tab】键) [ 经常使用]
<< 把当前行往左移动8个字符(至关于【Shift】+【tab】) [ 经常使用]
nz: 将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
撤销操做
u 命令撤销最近一次的操做,可使用屡次来恢复原有的操做 [ 经常使用]
U 撤销全部操做
. 能够恢复对使用u命令的操做 [ 经常使用]
复制/删除/粘贴操做
x 删除光标处的单个字符,并把删除后的字符放到缓存区( 实际上删除至关于剪切 ) [ 经常使用]
nx 删除三个字符。 例如, 3x删除光标处向右的三个字符
"bnx 把删除的字符放到缓存区b
dw 删除当前字符到单词尾(包括空格)的全部字符 [ 经常使用]
dd 删除光标所在行 [经常使用] [ 经常使用]
ndd 删除n行。 例如, 3dd从当前行开始向下删除三行文本 [ 经常使用]
"bndd 把删除的内容放到缓存区b
PS: 若是要删除第m至第n行的内容,能够在末行模式中输入m,nd。好比3,5d表示删除第3~5行 [ 经常使用]
yy 复制当前光标所在行的内容到vi缓冲区 [ 经常使用]
nyy 复制n行。例如:5yy就是从当前光标所处的行向下复制5行,把复制的内容放到vi缓存区 [经常使用]
"bnyy 将复制的内容放到缓存区b . 好比,b3yy 将三行数据存入缓存区b [ 经常使用]
PS: 若是要复制第m行到第n行之间的内容,能够在末行模式中输入m,ny例如:3,5y复制第三行到第五行内容到缓存区 [ 经常使用]
yw 复制当前光标所在位置到单词尾字符 (不包括空格) 的内容到vi缓存区,至关于复制一个单词 [经常使用]
nyw 复制n个单词例如:2yw就是复制两个单词
"bnyw 例如, 复制n个单词到缓存区b
y$ 复制光标所在位置到行尾内容到缓存区
y^ 复制光标所在位置到行首内容到缓存区
p 小写p, 将缓存区的内容粘贴到当前行的下方(与yy配合) ,或插入到当前光标的下一个位置(与dw, x, y$ , y^ 配合)[经常使用]
P 大写P,与小写p的做用相似,但粘贴都方向相反
查找与替换 vi的查找与替换功能要再末行模式下完成。 /关键字 自上而下查找,好比/work,表示从当前光标处往下查找关键字为work的内容[ 经常使用] ?关键字 自下而上查找 , 好比/work,表示从当前光标处往上查找关键字为work的内容 [ 经常使用] PS: 当找到匹配项时,光标会定位在关键词都字符开头。要继续查找下一个匹配项,只需敲入字符n; 要往回查找,敲入N. 能够输入2n往下查找下下一个匹配项 s/old_string/new_string 用new_string替换光标所在行中首次出现的old_string s/old_string/new_string/g 用new_string替换光标所在行中的全部old_string m,ns/old_string/new_string/g 用new_string替换第m行至第n行的全部old_string [ 经常使用] %s/old_string/new_string/g 用new_string替换全部的old_string [ 经常使用] /pattern_address/s/old_string/new_string/g 从当前光标处往下查找与pattern_address匹配的行,而后在该行上用new_string替换掉全部的old_string(实际上,这个命令是由/pattern_address 和/s/old_string/new_string/g组合而成) g/pattern_address/s/old_string/new_string/g 找出全部与pattern_address匹配的行, 并用new_string替换掉每一行全部的old_string( 注意: 先后两个g的含义是不同的,前面的g表示对整个文本搜索与pattern_address匹配的行, 后面的g表示针对每个与pattern_address匹配的行都用new_string替换掉old_string) 若是pattern_address和old_string同样,能够简写为g/pattern_address/s//new_string 能够在全部的命令尾加一个c命令,强制每一个替换须要用户进行确认,例如:s/old/new/c 或s/old/new/gc [ 经常使用] PS: 查找的一些技巧 /str/w file 正向搜索,并将第一个包含字符串str 的行写入file 文件/str1/,/str2/w file 正向搜索,并将包含字符串str1 的行至包含字符串str2 的行写入file 文件 恢复文件vi在编辑某一个文件时,会生成一个临时文件,这个文件以. 开头并以.swp结尾。正常退出该文件自动删除,若是意外退出例如突然断电,该文件不会删除,咱们在下次编辑时能够选择一下命令处理: O 只读打开,不改变文件内容E 继续编辑文件,不恢复.swp文件保存的内容R 将恢复上次编辑之后未保存文件内容Q 退出viD 删除.swp文件 或者使用vi -r 文件名来恢复未保存的内容