【Linux基础】VI 编辑器基本使用方法

时间:2022-06-19 14:56:02

vi编辑器是所有Unix及Linux系统下标准的编辑器。对Unix及Linux系统的任何版本,vi编辑器是完全相同的,它是Linux中最基本的文本编辑器。


第一章vi的三种模式

第二章vi文本编辑器

第三章vi编辑命令

(移动光标

(简单编辑

(插入文本的常用方法

(使用J合并两行

(回顾基本的vi命令

学习vi的唯一方法是实践。


第一章vi的三种模式

基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:

1命令行模式command mode

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。

输入vi filename后,默认进入命令模式,输入a、i、o均可改变当前模式为插入模式

2插入模式Insert mode

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。

3底行模式last line mode

将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。

不过一般我们在使用时把vi简化成两个模式,就是将底行模式(last line mode)也算入命令行模式command mode)。

第二章 vi文本编辑器

1、保存和退出文件 (命令模式)

(1) ZZ

输入ZZ 退出并保存编辑的命令。

(2) :wq + Enter(:wq命令等价于ZZ命令)

也可以使用ex命令来保存编辑操作。

输入:w 将保存文件但并不退出vi。

输入:q 没有进行任何编辑操作退出vi。

输入:q!不保存修改强制退出vi。

输入 :wq 则保存编辑器操作并退出vi。

2、不保存编辑而直接退出 (命令模式)

(1) :e! + Enter

输入 :e! 回到此次编辑前状态,重新编辑。

(2) :q! + Enter

输入:q! 放弃此次编辑,并不保存强制退出。

 

vi通常不允许用户放弃他所做的编辑操作。将感叹号加在 :e 或 :q 命令后面可使vi忽略这个限制,即使已经修改了缓冲区,vi也会执行该操作。

3、保存文件时所遇到的问题 

(1) :w!(等价于 :saveas file命令)

输入 :w! file 将覆盖现有的文件;

输入 :w newfile,将把编辑后的版本保存到新文件中。

(2) :!rm junkfile

输入类似于:!df,可以调用外部命令(:!df ,调用用于检查磁盘剩余空间的df命令)。

(3) :sh

输入 :sh,创建一个临时的UNIX shell来调用其他的UNIX命令。

输入 CTRL-D 或 exit 将终止shell执行并返回vi编辑环境

(4)CTRL+Zfg

(在大部分UNIX系统上,使用作业控制shell时,可以通过简单地输入 CTRL-Z 来挂起vi,并返回到UNIX命令提示符下;输入 fg 即可返回到vi)。

第三章vi编辑命令

 1、移动光标 

(1) 单一移动 h、j、k、l

在右手指下的 h 、j 、k 和 l 键可以用来移动光标。

h 左移,一个空格

j 下移,一行

k 上移,一行

l 右移,一个空格

注意 :也可以使用光标箭头键、+ 和 - 来上移和下移,或 RETURN 键和 BACKSPACE 键来移动光标,但它们都不是通用的方法,并且并不是所有的终端都支持箭头键。起初,使用字母键代替箭头键来移动光标可能会比较麻烦,但是进过一段时间的使用之后,你会发现这是vi的一个优点,因为不用让手指离开键盘中心就可以四处移动光标。

(2) 数字参数 4l

可以在移动命令的前面添加数字。例如,命令“4l”将光标向右移动4格,就像键入了4次l一样(llll)。

注意: 复合命令的作用是,对于我们所学的每个命令,可以有更多的选择和更强的功能。

(3) 行内移动 0$

vi有两个实用的行内移动命令:

0    移动到行首

$    移动到行尾

(4) 按文本块移动 wWbB

我们也可以按单词、句子、段落等等之类的文本块移动光标。

w 命令每次把光标向前移动一个单词,并把符号和标点作为单词处理。

W 命令也可以按单词移动光标,但此时并不把符合和标点作为单词计算。

b 命令可以按单词后移光标,作用与 w 命令相反。

B 命令可以按单词后移光标,作用与 W 命令相反。

(5)屏幕移动ctrl+udfbHML

Ctrl+u:向文件首翻半屏

Ctrl+d:向文件尾翻半屏

Ctrl+f:向文件尾翻一屏

Ctrl+b;向文件首翻一屏

H :光标移至屏幕顶行

M :光标移至屏幕中间行

L :光标移至屏幕最后行

(6)其它移动命令

1G或gg:光标移动到文章开头

G:移动到文章末尾

n+:光标下移n行

n-:光标上移n行

n$:光标移至第n行尾

 

(7)搜索命令

/pattern:从光标开始处向文件尾搜索pattern

?pattern:从光标开始处向文件首搜索pattern

n:在同一方向重复上一次搜索命令

N:在反方向上重复上一次搜索命令

(8)替换命令

:s/p1/p2/g  将当前行中所有p1均用p2替代

:n1,n2s/p1/p2/g  将第n1至n2行中所有p1均用p2替代

:g/p1/s//p2/g    将文件中所有p1均用p2替换

2、简单编辑 

i    插入命令

a    追加命令

c    修改命令

d    删除命令

y    复制命令

p    粘贴命令

先d后p    移动命令

(1) 插入新文本 i

输入 i 光标当前开始插入

(2) 追加文本 a

输入a 光标后开始插入

(3) 修改文本 c

cw    到单词的尾部

c2b    后退两个单词

c$    到行尾

c0    到行首

注意: 类似于 i 和 a,c 命令也使你留在插入模式中,直到按下ESC键才会回到命令模式。

[1] 单词cw

输入cw 删除一个单词并且开始进行编辑操作。

[2] ccC

输入cc 删除当前整行并且开始进行编辑操作。

输入C 删除从当前光标位置到行尾的所有字符,并开始编辑操作。(等价于 c$ 命令)

[3] 字符r

输入r利用一个单个字符替换另一个单个字符,替换完毕后直接返回命令模式。

(4) 替换文本 sS

s 只替换单个字符。替换多个字符,可使用数字前缀。

S  删除整行并开始编辑(等同于cc)。替换多行,可使用数字前缀。

s 和 S 都会使你处于插入模式,当完成新文本的输入时,即可按下ESC键退出插入状态。

R 输入的字符将逐个地替换屏幕上的文本,直到输入ESC键为止。最多只能改写一整行;当输入RETURN时,vi就会打开一个新行,并使你处于插入模式。

(5) 大小写转换 ~

输入~ 可以改变字母的大小写,并移动光标到下一个字符。现在的版本允许使用数字前缀。

输入guw 单词改为小写

输入gUw 单词改为大写

输入guu 当前行改为小写

输入gUU 当前行改为大写

(6) 删除文本 d

d 使用d命令删除文件中的冗余文本。类似于修改命令,删除命令也需要文本目标(将被删除的文本数量)。可以按单词(dw)、按行(dd 和 D)或按其他移动命令进行删除。

[1] 单词

dw

注意: dw 删除了光标定位在其首部的那个单词,要注意单词后面的空格也被删除掉了。dw 也可被用来删除部分单词。

de    它只删除到单词的尾部

dE    区别是,包括标点符号

db    向后删除一个单词

dB    区别是,包括标点符号

d$    删除到一行的尾部

d0    删除到一行的首部

[2] 

dd

对光标所在的整行进行删除,它不能删除行的一部分。类似于它的互补命令cc。

xdd 删除x行

D

用来删除从光标位置到行尾的文本(D是d$的缩写)。

[3] 字符

x 用来删除单个字符。只删除光标所在位置的字符。

X 删除光标前一个字符

可以带上数字前缀,将删除该数字所表示的数量的字符。例如,5x 将删除光标右边的5个字符。

删除操作中遇到的问题

u 取消上次命令操作

U 将该改行恢复到其原来的状态,即对改行进行任何改变之前的状态。

(7) 移动文本 (删除后pPxp

在vi中,先执行删除命令,然后立即输入p或者P实现文本移动。

执行删除命令后立即输入p  可以粘贴命令把位于缓冲区中的文本粘贴到光标位置的后面。

执行删除命令后立即输入P  区别是粘贴到光标的前面。

 

A、每次删除一个文本块,删除的部分都将暂时保存在一个专用缓冲区中。

B、删除命令后,必须立即使用p或者P,否则删除文本会丢失。而且只要没有进行新的编辑,就可以反复执行粘贴操作。

C、把删除的文本保存到命名缓冲区中,以便在以后可以重复恢复它。

输入xp 可以调换两个字母的顺序

(8) 复制文本 y

复制命令把选中的文本复制到一个专用缓冲区中,文本将保存在那里直到出现另一个复制操作(或删除操作)。

yy  复制一整行

Y(等价于yy)

复制操作与删除操作使用同一个缓冲区,每个新的删除操作或复制操作将取代复制缓冲区中先前的内容。与修改和删除命令一样,复制命令也可以与任何移动命令结合在一起使用(yw、y$、4yy)。

(9) 重复或撤销最后的命令 

在给出下一个命令之前,你所执行的每个编辑命令都将存储在一个临时缓冲区中。例如,如果在文件中的某个单词后插入the,那么用来插入文本的命令以及所输入的文本都将会暂时保存起来。

.(句点)将保存在临时缓冲区中的插入文本命令和插入的文本再次执行一遍。

u 撤销上一步操作(任何位置使用u均可)

U 撤销当前行的所有编辑修改(光标必须在修改行上)

(9)合并两行J

有时在编辑文件时,想合并一系列很难浏览的短行。当要把两行合并为一行时,可以将光标定位在第一行上,然后按下J键来合并这两行。

使用带数字参数的 J 能合并该数量的连续行。例如,可以使用 3J 命令来合并3行。

3、插入文本的常用方法 

i 是在光标前面插入文本,a 是在光标后面插入文本。这里还有一些在相对于光标不同位置的地方插入文本的其他命令:

A    在当前行的尾部添加文本(等价于 $a)

I    在行首插入文本(等价与 0i)

o    在光标所在行的下面新建一行,等待输入文本

O    在光标所在行的上面新建一行,等待输入文本

s    使用输入的文本替换光标所在位置的字符(最好用途,是把一个字符改为多个字符)

S    使用输入的文本替换当前行(等价于 cc)

R    使用新字符覆盖现有字符(区别:r    只替换光标所指的一个字符)

所有这些命令都会使vi处于插入模式,在插入文本后,记得按下ESC键返回命令模式。

插入命令的数字参数

除o 和 O 以外,上面的插入命令(加上 i 和 a)都可以带有数字前缀。通过数字前缀,可以使用 i、I、a 和 A 命令插入一排星号或替换字符。

例如,输入 10i* + ESC 可以插入10个星号。(注意:最后必须按 ESC才可以生效)

4、回顾基本的vi命令 

编辑命令

文本目标

修改

删除

复制

1 个单词

cw

dw

yw

2 个单词,不计标点

2cw 或 c2w

2dw 或 d2w

2yw 或 y2w

向后 3 个单词

3cb 或 c3b

3db 或 d3b

3yb 或 y3b

1 行

cc

dd

yy 或 Y

到行尾

c$

d$ 或 D

y$

到行首

c0

d0

y0

单个字符

r

x 或 X

yl 或 yh

5 个字符

5s

5x

5yl

移动

四个箭头(左下上右)

h 、 j 、 k 、 l

到下一行的首字符

+

到上一行的首字符

-

到单词的尾部

e 或 E

按单词前移

w 或 W

按单词后移

b 或 B

到行尾

$

到行首

0

其他操作

从缓冲区输出文本

p 或 P

启动 vi ,如果指定了文件,就打开该文件

vi file

保存编辑、退出文件

ZZ

不保存编辑、退出文件

:q!

文本创建和操作命令

在当前位置插入文本

i

在行首插入文本

I

在当前位置追加文本

a

在行尾追加文本

A

在光标所在行的下面新建一行,等待输入新文本

o

在光标所在行的上面新建一行,等待输入新文本

O

删除行并替换文本

S

使用输入的文本替换光标所在位置的字符

s

使用新文本覆盖现有文本

R

合并当前行和下一行

J (注意大写)

转换大小写

~

重复上次操作

.

取消上次修改

u

恢复行到初始状态

U

虽然只使用这些表所列出的命令就可以运用vi,但是为了掌握vi的真正功能(和提高自己的工作效率),将需要更多的工具。

在后续总结这些工具的用法。

参考 :学习vi编辑器(第六版)