为什么要学Vim
几乎每台Linux服务器都预装了Vim。当你SSH到服务器需要改配置文件的时候,没有VSCode可用,nano太弱,Vim是最实用的选择。
我不是Vim原教旨主义者,不会让你日常开发都用Vim。但服务器上改改配置文件的基本操作,你必须会。10分钟就能学会够用的部分。
Vim的三种模式
这是Vim最容易让新手困惑的地方——它有不同的模式:
| 模式 | 作用 | 进入方式 | 退出方式 |
|---|
| 普通模式 | 移动光标、复制粘贴 | 按Esc | - |
| 插入模式 | 编辑文本 | 按i/a/o | 按Esc |
| 命令模式 | 保存、退出、搜索 | 按: | 按Enter或Esc |
1
2
3
4
5
| 普通模式 ──按i──→ 插入模式
↑ │
└──按Esc────────┘
│
├──按:──→ 命令模式
|
最基本的操作流程
打开文件
1
| $ vim /etc/nginx/nginx.conf
|
编辑文件
1
2
3
4
5
| 1. 打开后默认在普通模式
2. 按 i 进入插入模式(左下角显示 -- INSERT --)
3. 像正常打字一样编辑
4. 编辑完按 Esc 回到普通模式
5. 输入 :wq 保存并退出
|
保存与退出
1
2
3
4
5
6
| :w 保存
:q 退出(未修改时)
:wq 保存并退出
:q! 强制退出(不保存)
:wq! 强制保存并退出
ZZ 保存并退出(快捷方式)
|
新手最常见的问题:“怎么退出Vim???"——按Esc再输入:q!就能强制退出。这个Stack Overflow上被问了几百万次。
移动光标
在普通模式下:
1
2
3
4
5
6
| h ← 左移
j ↓ 下移
k ↑ 上移
l → 右移
# 你也可以用方向键,但hjkl效率更高
|
快速移动
| 按键 | 作用 |
|---|
gg | 跳到文件开头 |
G | 跳到文件末尾 |
数字G | 跳到指定行(如50G跳到第50行) |
0 | 跳到行首 |
$ | 跳到行尾 |
w | 跳到下一个单词 |
b | 跳到上一个单词 |
Ctrl+f | 向下翻页 |
Ctrl+b | 向上翻页 |
1
2
3
| # 直接打开文件并跳到指定行
$ vim +50 /etc/nginx/nginx.conf
# 打开后光标在第50行
|
编辑操作
进入插入模式的几种方式
| 按键 | 作用 |
|---|
i | 在光标前插入 |
a | 在光标后插入 |
I | 在行首插入 |
A | 在行尾插入 |
o | 在下方新建一行 |
O | 在上方新建一行 |
复制、粘贴、删除
在普通模式下:
| 按键 | 作用 |
|---|
yy | 复制整行 |
3yy | 复制3行 |
dd | 删除(剪切)整行 |
3dd | 删除3行 |
p | 粘贴到光标下方 |
P | 粘贴到光标上方 |
u | 撤销 |
Ctrl+r | 重做 |
x | 删除光标处的字符 |
dw | 删除一个单词 |
实战示例
1
2
3
4
5
6
7
| # 场景:删除Nginx配置中的一个server块
1. 移动光标到 server { 那一行
2. 按 V 进入行选择模式
3. 按 j 往下选择到 } 那一行
4. 按 d 删除选中内容
5. 按 :wq 保存退出
|
搜索与替换
搜索
1
2
3
4
5
6
7
8
| /关键词 向下搜索
?关键词 向上搜索
n 跳到下一个匹配
N 跳到上一个匹配
# 实例:搜索"server_name"
/server_name
# 按n跳到下一个匹配位置
|
替换
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # 替换当前行第一个匹配
:s/old/new/
# 替换当前行所有匹配
:s/old/new/g
# 替换全文所有匹配
:%s/old/new/g
# 替换全文(带确认)
:%s/old/new/gc
# 每次会问你 y/n/a/q
# 实例:把所有80端口改成8080
:%s/listen 80/listen 8080/g
|
实用技巧
显示行号
1
2
3
| :set number 显示行号
:set nonumber 隐藏行号
:set nu 显示行号(简写)
|
语法高亮
1
2
| :syntax on 开启语法高亮
:syntax off 关闭
|
多文件编辑
1
2
3
4
5
6
7
| # 打开多个文件
$ vim file1.conf file2.conf
# 在Vim中切换
:n 下一个文件
:prev 上一个文件
:ls 列出所有打开的文件
|
分屏
1
2
3
4
| :split file2 水平分屏
:vsplit file2 垂直分屏
Ctrl+w w 在分屏间切换
Ctrl+w q 关闭当前分屏
|
配置Vim(可选)
创建~/.vimrc让Vim更好用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| " 基础设置
set number " 显示行号
set relativenumber " 相对行号
syntax on " 语法高亮
set encoding=utf-8 " UTF-8编码
" 缩进设置
set tabstop=4 " Tab宽度4
set shiftwidth=4 " 自动缩进宽度
set expandtab " Tab转空格
set autoindent " 自动缩进
" 搜索设置
set hlsearch " 高亮搜索结果
set incsearch " 实时搜索
set ignorecase " 忽略大小写
set smartcase " 智能大小写
" 其他
set cursorline " 高亮当前行
set showmatch " 括号匹配
set wildmenu " 命令补全菜单
set mouse=a " 启用鼠标(可选)
|
Vim vs Nano 对比
| 特性 | Vim | Nano |
|---|
| 学习难度 | 较高 | 极低 |
| 功能 | 非常强大 | 基础 |
| 效率 | 熟练后极高 | 一般 |
| 预装率 | 几乎100% | 大部分 |
| 适合场景 | 频繁编辑 | 偶尔改个配置 |
如果你只是偶尔改个配置文件,nano完全够用:
1
2
| $ nano /etc/nginx/nginx.conf
# Ctrl+O 保存, Ctrl+X 退出,底部有提示
|
新手最低要求
不需要记住所有命令。以下是我认为的最低要求,记住这些就能在服务器上存活:
1
2
3
4
5
6
7
8
9
10
| vim filename 打开文件
i 进入编辑模式
Esc 退出编辑模式
:wq 保存退出
:q! 不保存退出
/keyword 搜索
dd 删除一行
u 撤销
yy 复制一行
p 粘贴
|
10个操作,覆盖90%的使用场景。
总结
Vim不需要精通,但必须会基本操作。在服务器上改配置文件是常事,掌握了打开、编辑、保存、搜索这几个基本操作就够日常使用了。
更多Linux基础命令,可以参考Linux最常用的50个命令。服务器上编辑配置文件后,记得检查语法再重载服务,比如Nginx配置中的nginx -t。