vi编辑器的使用 正则表达式
关键词:VI,vi编辑器, shell
1、关于文本编辑器 vim
文本编辑器有不少,好比图形模式的gedit、kwrite、OpenOffice ... ... ,文本模式下的编辑器有vi、vim(vi的加强版本)和nano ... ... vi和vim是咱们在Linux中最经常使用的编辑器。咱们有必要介绍一下vi(vim)最简单的用法,以让Linux入门级用户在最短的时间内学会使用它。 windows
nano工具和DOS操做系统下的edit操做类似,使用简单,咱们不做介绍了,若是您有兴趣,不妨尝试一下; 服务器
2、vi 编辑器 编辑器
为何要学会简单应用vi? 工具
vi或vim是Linux最基本的文本编辑工具,vi或vim虽然没有图形界面编辑器那样点鼠标的简单操做,但vi编辑器在系统管理、服务器管理中,永远不是图形界面的编辑器能比的。当您没有安装X-windows桌面环境或桌面环境崩溃时,咱们仍须要字符模式下的编辑器vi;vi或vim 编辑器在建立和编辑简单文档最高效的工具; 学习
3、vi 编辑器的使用方法 spa
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
在Linux下开发通常都用vi编辑器来编写代码,就像Windows下用记事本写文挡同样编写各类文档,只是写的代码文件后缀名是.c或.cpp等;在之后的工做中,咱们天天的程序编写、文件编辑等工做都得用到vi编辑器,因此对vi运用的熟练程度直接决定了你的工做效率。
网上有关vi使用方法的资料有不少,你能够本身下载回来学习或直接学习Linux自带的帮助手册。无论你经过何种方式学习,下面的几点是你必需要掌握并熟练运用的:
1、 Vi的三种工做模式的区别以及相互间的切换
Vi的工做模式为:
1. 编辑模式
Vi 在初始启动(打开文件)后首先进入编辑模式,在此模式下可移动光标、删除文字、复制或粘贴文字等操做;
Vi语法:vi <文件名>;
2. 插入模式
当用户在编辑模式下键入 i, a, o 等命令以后进入插入模式,除 Esc 以外的任何字符均将被当作是插入到编辑缓冲区中的字符,按Esc后切换到编辑模式;
3. 最后行模式
当用户在编辑模式下键入“:”以后进入最后行模式,在此模式下可键入命令用来保存文件、读取文件内容、执行 Shell 命令、设置 Vi 参数、以正则表达式的方式查找字符串或替换字符串等;
2、 编辑模式命令操做
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 行选中命令
3、 插入模式命令操做
在编辑模式下正肯定位光标以后,可用如下命令切换到插入模式:
i 在光标左侧输入正文
a 在光标右侧输入正文
o 在光标所在行的下一行增添新行
O 在光标所在行的上一行增添新行
I 在光标所在行的开头输入正文
A 在光标所在行的末尾输入正文
上面介绍了几种切换到插入模式的简单方法。另外还有一些命令,它们容许在进入插入模式以前首先删去一段正文,从而实现正文的替换。这些命令包括:
s 用输入的正文替换光标所指向的字符
ns 用输入的正文替换光标右侧n个字符
cw 用输入的正文替换光标右侧的字
ncw 用输入的正文替换光标右侧的 n 个字
cb 用输入的正文替换光标左侧的字
ncb 用输入的正文替换光标左侧的 n 个字
cd 用输入的正文替换光标的所在行
ncd 用输入的正文替换光标下面的 n 行
c$ 用输入的正文替换从光标开始到本行末尾的全部字符
c0 用输入的正文替换从本行开头到光标的全部字符
4、 最后行模式命令操做
编辑模式下键入“:”,光标就跳到屏幕最后一行,并在那里显示冒号,用户输入的内容均显示在屏幕的最后一行,按回车键,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 放在命令开头,表示对正文中全部包含搜索字符串的行进行替换操做。
5、 Shell切换
在编辑正文时,利用 vi 命令模式下提供的 shell 切换命令,无须退出 vi 便可执行 Linux 命令,十分方便,也能够说是最后行模式。语法格式为:
:! command 执行完 shell 命令 command 后回到 vi
另外,在编辑模式下,键入 K ,可命令 vi 查找光标所在单词的手册页,至关于运行 man命令。