首页 > 代码库 > 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命令。