首页 > 代码库 > vi编辑器的使用
vi编辑器的使用
vi编辑器的使用
关键词:VI,vi编辑器,
1、关于文本编辑器
文本编辑器有很多,比如图形模式的gedit、kwrite、OpenOffice ... ... ,文本模式下的编辑器有vi、vim(vi的增强版本)和nano ... ... vi和vim是我们在Linux中最常用的编辑器。我们有必要介绍一下vi(vim)最简单的用法,以让Linux入门级用户在最短的时间内学会使用它。
nano工具和DOS操作系统下的edit操作相似,使用简单,我们不作介绍了,如果您有兴趣,不妨尝试一下;
2、vi 编辑器
为什么要学会简单应用vi?
vi或vim是Linux最基本的文本编辑工具,vi或vim虽然没有图形界面编辑器那样点鼠标的简单操作,但vi编辑器在系统管理、服务器管理中,永远不是图形界面的编辑器能比的。当您没有安装X-windows桌面环境或桌面环境崩溃时,我们仍需要字符模式下的编辑器vi;vi或vim 编辑器在创建和编辑简单文档最高效的工具;
3、vi 编辑器的使用方法
3.1 如何调用vi ;
[root@localhost ~]# vi filename
3.2 vi 的三种命令模式
Command(命令)模式,用于输入命令;
Insert(插入)模式,用于插入文本;
Visual(可视)模式,用于视化的的高亮并选定正文;
3.3 文件的保存和退出
Command 模式是vi或vim的默认模式,如果我们处于其它命令模式时,要通过ESC键切换过来。
当我们按ESC键后,接着再输入:号时,vi会在屏幕的最下方等待我们输入命令;
:w 保存;
:w filename 另存为filename;
:wq! 保存退出;
:wq! filename 注:以filename为文件名保存后退出;
:q! 不保存退出;
:x 应该是保存并退出 ,功能和:wq!相同
3.4 光标移动
当我们按ESC进入Command模式后,我们可以用下面的一些键位来移动光标;
j 向下移动一行;
k 向上移动一行;
h 向左移动一个字符;
l 向右移动一个字符;
ctrlb 向上移动一屏;
ctrlf 向下移动一屏;
向上箭头 向上移动;
向下箭头 向下移动;
向左箭头 向左移动;
向右箭头 向右移动;
我们编辑一个文件时,对于 j、k、l和h键,还能在这些动作命令的前面加上数字,比如 3j,表示向下移动3行。
3.5 插入模式(文本的插入)
i 在光标之前插入;
a 在光标之后插入;
I 在光标所在行的行首插入;
A 在光标所在行的行末插入;
o 在光标所在的行的上面插入一行;
O 在光标所在的行的下面插入一行;
s 删除光标后的一个字符,然后进入插入模式;
S 删除光标所在的行,然后进入插入模式;
3.6 文本内容的删除操作
x 一个字符;
#x 删除几个字符,#表示数字,比如3x;
dw 删除一个单词;
#dw 删除几个单词,#用数字表示,比如3dw表示删除三个单词;
dd 删除一行;
#dd 删除多个行,#代表数字,比如3dd 表示删除光标行及光标的下两行;
d$ 删除光标到行尾的内容;
J 清除光标所处的行与上一行之间的空格,把光标行和上一行接在一起;
3.7 恢复修改及恢复删除操作
u 撤消修改或删除操作;
按ESC键返回Command(命令)模式,然后按u键来撤消删除以前的删除或修改;如果您想撤消多个以前的修改或删除操作,请按多按几次u。这和Word的撤消操作没有太大的区别;
3.8 可视模式
在最新的Linux发行版本中,vi提供了可视模式,因为这个功能是vim才有的。如果您用的vi没有这个功能,就换成vim就有了。打开可视模式,按ESC键,然后按v就进入可视模式;
可视模式为我们提供了极为友好的选取文本范围,以高亮显示;在屏幕的最下方显示有;
-- 可视 --
或
--VISUAL--
进入可视模式,我们就可以用前面所说的命令行模式中的光标移动指令,可以进行文本范围的选取。
选取文本范围有何用?
我们可以对某部份删除作业,按d键就删除了我们选中的内容。
选中内容后,我们按y就表示复制;按d表示删除;
值得一提是的删除的同时,也表示复制。我们返回到命令模式,然后移动光标到某个位置,然后按shiftp键,就把刚才删除的内容贴上了。我们先在这里提一句,在后文,我们还得详细说说。
退出可视模式,还是用ESC键;
3.9 复制和粘帖的操作
其实删除也带有剪切的意思,当我们删除文字时,可以把光标移动到某处,然后按shiftp键就把内容贴在原处,然后再移动光标到某处,然后再按p或shiftp又能贴上;
p 在光标之后粘帖;
shiftp 在光标之前粘帖
来举一例:
比如我们想把一个文档的第三行复制下来,然后帖到第五行的后面,我们应该怎么做呢?
有两种方法;
第一种方法:
先把第三行删除,把光标移动到第三行处,然后用dd动作,接着再按一下shiftp键。这样就把刚才删除的第三行帖在原处了。
接着我们再用k键移动光标到第五行,然后再按一下p键,这样就把第三行的内容又帖到第五行的后面了;
第二种方法:
进入可视模式,按ESC键,然后按v键。移动鼠标指针,选中第三行的内容,然后按y键复制;再移动指针到第五行,最后按p键;
所以复制和粘贴操作,是命令模式、插入模式及可视模式的综合运用;我们要学会各种模式之间的切换,要常用ESC键;更为重要的学会在命令模式下移动光标;
3.10 关于行号
有时我们配置一个程序运行时,会出现配置文件X行出现错误 。这时我们要用到行号相关的操作;
为所有内容添加行号;
按ESC键,然后输入:
:set number
光标所处位置
在屏幕的右下角,有类似如下的;
57,8 27%
在这之中,57表示第57行,8表示第8个字符;
3.11 查找和替换功能
3.11.1 查找
首先,我们要进入ESC键,进入命令模式;我们输入/或?就进入查找模式了;
/SEARCH 注:正向查找,按n键把光标移动到下一个符合条件的地方;
?SEARCH 注:反向查找,按shiftn 键,把光标移动到下一个符合条件的
举一例:比如我想在一个文件中找到swap单词,我应该如下做;
首先按ESC键,进入命令模式,然后输入;
/swap
或
?swap
3.11.2 替换
按ESC键进入命令模式;
:s /SEARCH/REPLACE/g 注:把当前光标所处的行中的SEARCH单词,替换成REPLACE,并把所有SEARCH高亮显示;
:%s /SEARCH/REPLACE 注:把文档中所有SEARCH替换成REPLACE;
:#,# s /SEARCH/REPLACE/g 注:#号表示数字,表示从多少行到多少行,把SEARCH替换成REPLACE;
注:在这之中,g表示全局查找;我们注意到,就是没有替换的地方,也会把SEARCH高亮显示;
举例说明:
比如我们有一篇文档要修改;
我们把光标所在的行,把所有单词the,替换成THE,应该是:
:s /the/THE/g
我们把整篇文档的所有的the都替换成THE,应该是:
:%s /the/THE
我们仅仅是把第1行到第10行中的the,替换成THE,应该是;
:1,10 s /the/THE/g
1.1.1 编辑器vi
在Linux下开发一般都用vi编辑器来编写代码,就像Windows下用记事本写文挡一样编写各种文档,只是写的代码文件后缀名是.c或.cpp等;在以后的工作中,我们每天的程序编写、文件编辑等工作都得用到vi编辑器,所以对vi运用的熟练程度直接决定了你的工作效率。
网上有关vi使用方法的资料有很多,你可以自己下载回来学习或直接学习Linux自带的帮助手册。不管你通过何种方式学习,下面的几点是你必须要掌握并熟练运用的:
一、 Vi的三种工作模式的区别以及相互间的切换
Vi的工作模式为:
1. 编辑模式
Vi 在初始启动(打开文件)后首先进入编辑模式,在此模式下可移动光标、删除文字、复制或粘贴文字等操作;
Vi语法:vi <文件名>;
2. 插入模式
当用户在编辑模式下键入 i, a, o 等命令之后进入插入模式,除 Esc 之外的任何字符均将被看成是插入到编辑缓冲区中的字符,按Esc后切换到编辑模式;
3. 最后行模式
当用户在编辑模式下键入“:”之后进入最后行模式,在此模式下可键入命令用来保存文件、读取文件内容、执行 Shell 命令、设置 Vi 参数、以正则表达式的方式查找字符串或替换字符串等;
二、 编辑模式命令操作
1. 移动光标
要对正文内容进行修改,首先必须把光标移动到指定位置:
k、j、h、l 功能分别等同于上、下、左、右箭头键
Ctrl+b 在文件中向上移动一页(相当于 PageUp 键)
Ctrl+f 在文件中向下移动一页(相当于 PageDown 键)
H 将光标移到屏幕的最上行(Highest)
nH 将光标移到屏幕的第 n 行
2H 将光标移到屏幕的第 2 行
M 将光标移到屏幕的中间(Middle)
L 将光标移到屏幕的最下行(Lowest)
nL 将光标移到屏幕的倒数第 n 行
3L 将光标移到屏幕的倒数第 3 行
w 在指定行内右移光标,到下一个字的开头
e 在指定行内右移光标,到一个字的末尾
b 在指定行内左移光标,到前一个字的开头
0 数字0,左移光标,到本行的开头
$ 右移光标,到本行的末尾
^ 移动光标,到本行的第一个非空字符
2. 替换和删除
以用其他字符来替换光标所指向的字符,或从当前光标位置删除一个或多 个字符:
rc 用 c 替换光标所指向的当前字符
nrc 用 c 替换光标所指向的前 n 个字符
5rc 用 c 替换光标所指向的前 5 个字符
x 删除光标所指向的当前字符
nx 删除光标所指向的前 n 个字符
3x 删除光标所指向的前 3 个字符
dw 删除光标右侧的字
ndw 删除光标右侧的 n 个字
3dw 删除光标右侧的 3 个字
db 删除光标左侧的字
ndb 删除光标左侧的 n 个字
5db 删除光标左侧的 5 个字
dd 删除光标所在行,并去除空隙
ndd 删除 n 行内容,并去除空隙
3dd 删除 3 行内容,并去除空隙
3. 粘贴和复制
从正文中删除的内容(如字符、字或行)并没有真正丢失,而是被剪切并复制到了一个内存缓冲区中。用户可将其粘贴到正文中的指定位置:
p 小写字母 p,将缓冲区的内容粘贴到光标的后面
P 大写字母 P,将缓冲区的内容粘贴到光标的前面
yy 复制当前行到内存缓冲区
nyy 复制 n 行内容到内存缓冲区
5yy 复制 5 行内容到内存缓冲区
4. 搜索字符串
要查找文件中指定字或短语出现的位置,可以 用 vi 直接进行搜索,而不必以手工方式进行。搜索方法是:键入字符 / ,后面跟以要搜索的字符串,然后 按回车键。编辑程序执行正向搜索(即朝文件末尾方向),并在找到指定字符串后,将光标停到该字符串的 开头;键入 n 命令可以继续执行搜索,找出这一字符串下次出现的位置。用字符 ? 取代 / ,可以实现反向 搜索(朝文件开头方向)
5. 撤销和重复
在编辑文档的过程中,为消除某个错误的编辑命令造成的后果,可以用撤消命令。另外,如果用户希望在新 的光标位置重复前面执行过的编辑命令,可用重复命令:
u 撤消前一条命令的结果
. 重复最后一条修改正文的命令
6. 文本选中
vi 可进入到一种成为 Visual 的模式,在该模式下,用户可以用光标移动命令可视地选择文本,然后再执行其他编辑操作,例如删除、复制等:
v 字符选中命令
V 行选中命令
三、 插入模式命令操作
在编辑模式下正确定位光标之后,可用以下命令切换到插入模式:
i 在光标左侧输入正文
a 在光标右侧输入正文
o 在光标所在行的下一行增添新行
O 在光标所在行的上一行增添新行
I 在光标所在行的开头输入正文
A 在光标所在行的末尾输入正文
上面介绍了几种切换到插入模式的简单方法。另外还有一些命令,它们允许在进入插入模式之前首先删去一段正文,从而实现正文的替换。这些命令包括:
s 用输入的正文替换光标所指向的字符
ns 用输入的正文替换光标右侧n个字符
cw 用输入的正文替换光标右侧的字
ncw 用输入的正文替换光标右侧的 n 个字
cb 用输入的正文替换光标左侧的字
ncb 用输入的正文替换光标左侧的 n 个字
cd 用输入的正文替换光标的所在行
ncd 用输入的正文替换光标下面的 n 行
c$ 用输入的正文替换从光标开始到本行末尾的所有字符
c0 用输入的正文替换从本行开头到光标的所有字符
四、 最后行模式命令操作
编辑模式下键入“:”,光标就跳到屏幕最后一行,并在那里显示冒号,用户输入的内容均显示在屏幕的最后一行,按回车键,vi 执行命令;
1. 退出命令
ZZ 在编辑模式下可以退出 vi 编辑程序,该命令保存对正文所作的修改,覆盖原始文件;
:q 在未作修改的情况下退出
:q! 放弃所有修改,退出编辑程序
:wq 将编辑的内容写入原始文件并退出编辑程序(相当于 ZZ 命令)
2. 行号与文件
命令模式下,可以规定命令操作的行号范围。数值用来指定绝对行号;字符“.”表示光标所在行的行号;字符 符“$”表示正文最后一行的行号;简单的表达式,例如“.+5”表示当前行往下的第 5 行;
编辑中的每一行正文都有自己的行号,用下列命令可以移动光标到指定行:
:n 将光标移到第 n 行
:w 将编辑的内容写入原始文件,用来保存编辑的中间结果
:w file 将编辑的内容写入 file 文件,保持原有文件的内容不变
:a,bw file 将第 a 行至第 b 行的内容写入 file 文件
:r file 读取 file 文件的内容,插入当前光标所在行的后面
:e file 编辑新文件 file 代替原有内容
:f file 将当前文件重命名为 file
:f 打印当前文件名称和状态,如文件的行数、光标所在的行号等
:345w file 将第 345 行写入 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 命令
3. 字符串搜索
给出一个字符串,可以通过搜索该字符串到达指定行。如果希望进行正向搜索,将待搜索的字符串置于两个“ /”之间;如果希望反向搜索,则将字符串放在两个“?”之间:
:/str/ 正向搜索,将光标移到下一个包含字符串 str 的行
:?str? 反向搜索,将光标移到上一个包含字符串 str 的行
:/str/w file 正向搜索,并将第一个包含字符串 str 的行
写入 file 文件
:/str1/,/str2/w file 正向搜索,并将包含字符串 str1 的行至包含字符串 str2 的行写 入 file 文件
4. 正文替换
利用 :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 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。
五、 Shell切换
在编辑正文时,利用 vi 命令模式下提供的 shell 切换命令,无须退出 vi 即可执行 Linux 命令,十分方便,也可以说是最后行模式。语法格式为:
:! command 执行完 shell 命令 command 后回到 vi
另外,在编辑模式下,键入 K ,可命令 vi 查找光标所在单词的手册页,相当于运行 man命令。