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!
