关于Linux vi编辑工具使用方法

1. 打开文件

vi 文件名

例如:

vi /etc/hosts

如果文件不存在,vi 会创建它。

也可以:

vi /etc/nginx/nginx.conf

2. 最重要:vi 有不同模式

刚进入 vi 时,默认是:

命令模式(Normal Mode)

这时候你直接输入字母,不是往文件里输入文字,而是在执行命令。

主要有三个模式:

命令模式
   │
   ├── i / a / o
   ↓
插入模式
   │
   └── Esc
   ↓
命令模式

另外还有:

命令模式
   │
   └── :
   ↓
底线命令模式

最重要的三个键

按键 功能
i 在当前位置前开始输入
Esc 返回命令模式
: 进入底线命令模式

如果你只记住:

i → 输入 → Esc → :wq

基本就能使用 vi 了。


3. 输入文字

打开:

vi test.txt

按:

i

左下角通常会出现:

-- INSERT --

现在就可以正常输入:

Hello Linux
This is a test.

输入完成后按:

Esc

退出插入模式。


4. 保存文件

在命令模式按:

:

然后输入:

w

回车:

:w

意思是:

write,保存文件。


5. 保存并退出

最常用:

:wq

或者:

:x

两者都可以保存并退出。

例如:

Esc
:wq
Enter

6. 不保存直接退出

如果修改错了,不想保存:

:q!

也就是:

Esc
:q!
Enter

这个非常重要。

例如你打开:

vi /etc/nginx/nginx.conf

改乱了,想放弃所有修改:

:q!

7. 三个最重要的退出命令

建议直接记住:

命令 作用
:w 保存
:wq 保存并退出
:q! 不保存,强制退出

8. 移动光标

在命令模式下:

h    左
j    下
k    上
l    右

也可以使用方向键。

经典的:

        k
        ↑
    h ←   → l
        ↓
        j

例如:

jjjj

向下移动 4 行。


9. 快速移动

这些非常实用:

按键 功能
0 移动到行首
^ 移动到行首第一个非空字符
$ 移动到行尾
gg 文件第一行
G 文件最后一行
数字G 跳到指定行

例如:

100G

直接跳到第 100 行。

如果你正在排查 Nginx:

vi /etc/nginx/nginx.conf

想去第 200 行:

200G

10. 翻页

Ctrl + f

向下翻一页。

Ctrl + b

向上翻一页。

还有:

Ctrl + d

向下半页。

Ctrl + u

向上半页。


11. 删除

删除一个字符

x

删除光标所在字符。

删除一整行

dd

这是非常常用的命令。

例如:

dd

删除当前行。

删除 5 行

5dd

意思是:

从当前行开始删除 5 行。

删除到行尾

D

12. 复制

复制当前行:

yy

然后粘贴:

p

例如:

yy
p

效果:

原来的内容
原来的内容

复制 5 行:

5yy

13. 撤销

修改错了:

u

撤销。

例如:

dd

删错了:

u

就可以恢复。

重做:

Ctrl + r

14. 搜索

这是服务器配置文件中非常重要的功能。

按:

/

输入搜索内容。

例如:

/server

然后回车。

会搜索:

server

查找下一个

n

查找上一个

N

例如检查 Nginx:

/listen

然后不断按:

n

就可以跳到下一个 listen。


15. 搜索并高亮

可以:

:set hlsearch

开启搜索高亮。

关闭:

:set nohlsearch

16. 行号

服务器配置文件我很推荐开启行号:

:set number

例如:

1  user www-data;
2  worker_processes auto;
3
4  events {
5      worker_connections 1024;
6  }

关闭:

:set nonumber

17. 直接跳到某一行

例如:

:100

可以跳到第 100 行。

或者:

100G

也可以。


18. 修改一行

例如:

server_name example.com;

光标在这一行。

可以使用:

cc

清空当前行并进入插入模式。

然后输入:

server_name example.org;

按:

Esc

完成。


19. 修改当前字符

r

例如:

abc

光标在 b:

r

然后输入:

x

就变成:

axc

20. 替换文字

这是非常实用的功能。

例如:

:%s/old/new/g

意思:

整个文件中,把 old 替换成 new。

例如:

:%s/http/https/g

把整个文件中的:

http

替换成:

https

只替换当前行

:s/old/new/g

指定行范围

例如第 10~20 行:

:10,20s/old/new/g

21. 删除指定行

删除第 10 行:

:10d

删除第 10~20 行:

:10,20d

删除整个文件:

:%d

这个命令非常危险,会把当前文件内容全部删除。


22. 复制/移动整行

复制第 10~20 行:

:10,20y

然后:

p

粘贴。


23. 从其他文件读取内容

例如:

:r other.txt

会把 other.txt 的内容插入到当前位置。

这个在 Linux 配置文件处理中偶尔非常有用。


24. 保存到另一个文件

例如当前正在编辑:

test.txt

想另存为:

test2.txt

执行:

:w test2.txt

25. 查看当前文件信息

Ctrl + g

可以看到类似:

"nginx.conf" 120L, 3500C

表示:

120 行
3500 个字符

26. 常用的组合操作

Vi 最厉害的地方之一就是:

动作可以组合。

例如:

3dd

删除 3 行。

5yy

复制 5 行。

3j

向下移动 3 行。

3k

向上移动 3 行。


27. dw:删除一个单词

例如:

hello world linux

光标放在 hello:

dw

删除:

hello

28. cw:修改一个单词

例如:

server_name old.example.com;

光标放在:

old

执行:

cw

然后输入:

new

得到:

server_name new.example.com;

29. d$

删除光标到行尾的内容:

d$

也可以简单写:

D

30. d0

删除光标到行首:

d0

31. ci"

这个属于 Vim/Vi 中非常好用的一类操作。

例如:

server_name "old.example.com";

光标放在引号内部:

ci"

然后输入:

new.example.com

就可以直接替换引号里面的内容。

类似的:

ci(
ci[
ci{
ci'
ci`

在配置文件和代码编辑中非常方便。


32. 一个完整实战

假设你需要修改:

/etc/nginx/nginx.conf

先:

vi /etc/nginx/nginx.conf

进入后:

:set number

搜索:

/worker_processes

找到后:

cw

输入:

auto

然后:

Esc

检查配置。

保存:

:w

退出:

:q

然后在 Linux 终端执行:

nginx -t

如果:

syntax is ok
test is successful

再重载:

systemctl reload nginx

这就是服务器上非常典型的一套流程。


33. 最值得背下来的命令

如果你刚开始学,不需要一次记几十个。

先记下面这张:

模式

i       开始输入
Esc     返回命令模式
:       底线命令

保存退出

:w      保存
:wq     保存退出
:q      退出
:q!     不保存强制退出

移动

h       左
j       下
k       上
l       右

0       行首
$       行尾
gg      文件开头
G       文件结尾
100G    第100行

修改

i       当前字符前插入
a       当前字符后插入
o       下一行插入
O       上一行插入
r       替换一个字符
cw      修改一个单词
cc      修改整行

删除

x       删除字符
dd      删除整行
D       删除到行尾
dw      删除单词

复制

yy      复制一行
p       粘贴

撤销

u       撤销
Ctrl+r  重做

搜索

/xxx    搜索 xxx
n       下一个
N       上一个

配置

:set number

显示行号。

:set nonumber

关闭行号。


34. 给你一个「服务器管理员版」速查表

以后你 SSH 到服务器,基本可以把这张表放旁边:

打开文件
vi /path/to/file

进入编辑
i

退出编辑模式
Esc

保存
:w

保存退出
:wq

放弃修改退出
:q!

移动
h j k l

行首
0

行尾
$

第一行
gg

最后一行
G

跳到第 N 行
NG

删除一行
dd

删除 N 行
Ndd

复制一行
yy

复制 N 行
Nyy

粘贴
p

撤销
u

重做
Ctrl+r

搜索
/关键词

下一个
n

上一个
N

显示行号
:set number

取消行号
:set nonumber

全文替换
:%s/旧/新/g

删除指定行
:N d

保存
:w

退出
:q

保存退出
:wq

强制退出
:q!

 

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享