Vim的简单介绍及练习题

2021年4月23日 116点热度 3人点赞 0条评论

内容简介

简单的介绍了Vim和vi的常用操作,附加了2道Vim练习题,加强记忆快捷操作。

1.Vim的介绍

vim和vi是Linux系统下的常用编辑器,可以对Linux下的文件进行编辑和修改等操作。

vim是vi的升级版,支持了代码高亮、增加了插件系统和许多工具的集成等等优点。

2.Vim的安装

2.1.CentOS/RHEL下安装

yum -y install vim

2.2.Ubuntu下安装

apt-get install vim

3.Vim的几种模式

vim和vi的模式相同,都有三种模式,分别是普通模式、插入模式、末行模式。

1.普通模式

Vim 是一个多模式的编辑器。就是说,在不同模式下,编辑器的响应是不同的。在普通模 式下,你敲入的字符只是命令;而在插入模式,你敲入的字符就成为插入的文本了。

用户使用vi或vim打开文件,便进入了普通模式。

在普通模式下可以:

  • 对文本进行复制、粘贴、删除等工作;
  • 进入编辑模式;
  • 进入末行模式。

 

普通模式下对文本操作的快捷键
快捷键 作用
G 光标跳转至整个文本的末端
gg 光标跳转至整个文本的顶端
Ngg 光标跳转至当前文本内的N行,N为数字
$ 光标跳转至当前光标所在行的尾部
0 或 ^ 光标跳转至当前光标所在行的首部
Ctrl+f 向下翻页
Ctrl+b 向上翻页
yy 复制当前光标所在的行
Nyy 复制当前光标及光标向下N-1行
p 将复制的内容粘贴至当前光标的下一行
P 将复制的内容粘贴至当前光标的上一行
dd 删除当前光标所在的行
Ndd 删除当前光标所在的行及光标向下N-1行
dG 删除当前光标及光标以后的所有行
D 删除当前光标及光标以后的内容
x 删除当前光标标记往后的字符
X 删除当前光标标记往前的字符
dd & p 剪切文本:删除当前文本,再粘贴当前文本
u 撤销上一步操作
r 替换当前光标标记的单个字符
R 进入REPLACE,连续替换,直至按ESC结束

 

从普通模式进入到编辑模式
快捷键 作用
a 从目前光标所在的下一个字符处开始输入
A 从光标所在行的最后一个字符处开始输入
i 从目前光标所在处开始输入
I 在目前所在行的第一个非空格符处开始输入
o 在目前光标所在行的下一行处输入新的一行
O 在目前光标所在行的上一行处输入新的一行

 

从普通模式切换到末行模式
快捷键 作用
: 从普通模式进入到末行模式

2.编辑模式

编辑模式主要对文本内容进行编辑和修改,键盘上除了ESC键以外,其他的按键都可以视为输入按钮,可以对文本进行任何编辑。编辑模式无法直接切换到末行模式。

从编辑模式切换到普通模式
快捷键 作用
ESC 从编辑模式进入到普通模式

3.末行模式

末行模式主要用来保存或退出文本,末行模式也可以使用一些命令来帮助处理文本内容,也称作命令模式。

常用保存、退出的指令
指令 作用
:w 保存文本
:q 退出vim,只有在未对文本进行编辑时可以使用
:w! 强制保存文本,当文件属性为【只读】时,强制写入
:q! 强制退出vim,强制离开不存储文本
:wq 保存并退出文本
:wq! 强制退出并保存文本
ZZ 快速保存退出,等效于:wq
:x 等效于:wq

 

其他常用指令
指令 作用
: number 跳转至number行号
/ string 查找关键字
n 按照搜索到的内容依次往下进行查找
N 按照搜索到的内容依次往上进行查找
:w newfilename 另存文本为新的文件
:r filename 从filename文件中读取内容,并添加到光标所在行后面
:nr filename 指定filename文件内容至当前文本的第n行下面
:1,5s#old#new#g 替换1-5行中的old为new
:%s#old#new#g 替换整个文件中的old为new
:%#old#new#gc 替换内容时提示是否需要替换
:%s#old##gn 统计当前文本内old出现的次数
:set nu 显示行号
:set ic 查找时忽略大小写

4.视图模式

从普通模式可以进入到视图模式,主要是用来进行批量操作。

可视块

Ctrl + v ,进入到可视块模式,可以对选中的块进行操作

1.插入:按shift+i进入编辑模式,输入要添加的字符,然后按ESC或按两下ESC生效

2.删除:选中内容后,按x或d进行删除

3.替换:选中需要替换的内容,按r键,输入替换后的内容

 

可视行

Shift + v , 进入到可视行模式,选中整行内容,对整行内容进行操作

1.复制:选中行内容后按Y键进行复制

2.删除:选中行内容后按d键进行删除

 

5.图示三种模式的切换

简单的说明了vim/vi的三种模式之间的切换。

Vim三种模式切换示意图

 

4.练习示例

4.1.练习1

练习使用的文本1

[root@magedu-node1 test]# cat passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
test-1:x:1000:1000::/home/test-1:/bin/bash
test-2:x:1001:1001::/home/test-2:/bin/bash
test-3:x:1002:1002::/home/test-3:/bin/bash
test-4:x:1003:1003::/home/test-4:/bin/bash
test-5:x:1004:1004::/home/test-5:/bin/bash
test-6:x:1005:1005::/home/test-6:/bin/bash
test-7:x:1006:1006::/home/test-7:/bin/bash
test-8:x:1007:1007::/home/test-8:/bin/bash
test-9:x:1008:1008::/home/test-9:/bin/bash
Root-1:x:1000:1000::/home/Root-1:/bin/bash
RoOt-2:x:1001:1001::/home/RoOt-2:/bin/bash
ROoT-3:x:1002:1002::/home/ROot-3:/bin/bash
RooT-4:x:1003:1003::/home/RooT-4:/bin/bash

需求:


1.将passwd 复制到/root/目录下,并重命名为test.txt

答案
cp passwd /root/test.txt

2.用vim打开test.txt并显示行号

答案
vim /root/test.txt

:set nu

3.分别向下、向右、向左、向上移动5个字符,分别向下、向上翻页

答案
Ctrl +f

Ctrl+b

4.把光标移动到行末,再移动到行首,移动到test.txt文件的最后一行,移动到文件的首行

答案
$

0

G

gg

5.搜索文件中出现的root并数一下一共出现多少个,不区分大小写搜索

答案
:set ic

:%s#root##gn

6.把从第一行到第三行出现的root替换为--dd--,然后还原上一步操作

答案
:1,3s#root#--dd--#g

u

7.把整个文件中所有的root替换成--dd--

答案
:%s#root#--dd--#g

8.把光标移动到20行,删除本行,还原上一步操作

答案
:20

dd

u

9.删除第19行,还原上一步操作

答案
:19

dd

u

10.删除从第5行到第10行的所有内容,还原上一步操作

答案
:5

6dd

u

11.复制第2行并粘贴到11行下面,还原上一步操作

答案
:2

yy

:11

p

uu

12.复制从11行到15行的内容并粘贴到8行上面,还原上一步操作

答案
:11

Shift + v 选中11-15行

y

:8

P

uu

13.把13行到18行的内容移动到文件的尾部,还原上一步操作

答案
:13

Shift + v 选中13-18行

d

G

p

uu

14.光标移动到首行。把/sbin/nologin改成/bin/bash

答案
gg

:1s#s/bin/nologin#/bin/bash#g

15.在第一行下面插入新的一行,并输入"# Hello!"

答案
:1

O

键入 "# Hello!"

16.保存文档并退出

答案
ESC
wq

 

4.2练习2

练习使用的文本2

[root@magedu-node1 test]# cat proxy.conf
server {
    Listen 8080;
    Server_Name vim.EXAMPLE.com;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forward-for;
        proxy_intercept_errors on;
        proxy_next_upstream error timeout;
        proxy_next_upstream_timeout 3s;
        proxy_next_upstream_tries 2;
        error_page 500 502 403 404 = /proxy_error.html;
    }
    location = /proxy_error.html {
        root /code/proxy;
    }
}

需求2

1.使用vim 打开proxy.conf文件

答案
vim proxy.com

2.修改Listen为listen小写,并将8080修改为80

答案
:%s#Listen#listen#g

:%s#8080#80#g

3.修改Server_Name为server_name小写

答案
:%s#Server_Name#server_name#g

4.修改vim.EXAMPLE.com为vim.example.com

答案
:%s#vim.EXAMPLE.com#vim.example.com#g

5.在server_name行下插入一行root /code;

答案
o

键入root /code;

6.复制5-14行的内容,然后将其粘贴到14行下面

答案
ESC

:5

10yy

:14

p

7.将与proxy_set_header相关的两行全部删除

答案
/proxy_set_header

在搜索到的行上dd

8.如上操作完成后,在13-20行前面加上#号

答案
:13

Ctrl + v 选中13-20行首

Shift + i 进入编辑模式,键入#,按ESC或按两下ESC

9.删除21-23的行,然后保存文件

答案
:21

3dd

小李

学无止境,勇攀高峰。