大家好,我是程序员柏风,AI 最全的 Vibecoding 学习地图 http://coderoadmap.cn 作者。
文本编辑器
这一课你将能做到
- 使用 nano 在 30 秒内打开、修改、保存一个配置文件,适合紧急救场
- 使用 vim 完成创建、编辑、保存、退出的完整流程,理解三种模式的切换逻辑
- 根据场景选择合适的编辑器:临时改一行配置用 nano,批量编辑或写脚本用 vim
为什么要学
服务器上的配置没有「双击打开」这回事。Nginx 的虚拟主机配置、MySQL 的 my.cnf、Spring Boot 的 application.yml、systemd 的服务单元文件——所有这些修改都在终端里完成。不会终端编辑器,就像厨师不会用刀,遇到线上配置需要热修时只能干着急。
nano 简单到几乎不需要学,适合初学者和一次性修改;vim 效率极高,是 Linux 世界的通用语言,面试中「你会用 vim 吗?」几乎是送分题(答不会则可能成为送命题)。
先建立图像
nano 的界面:
GNU nano 6.2 nginx.conf
server {
listen 80;
server_name example.com;
}
^G 帮助 ^O 保存 ^W 搜索 ^K 剪切 ^J 对齐 ^C 光标 ^X 退出
# ^ 表示 Ctrl 键,所以 ^O = Ctrl+O
vim 的三种模式切换:
按 i/a/o 按 Esc
普通模式 <----------> 插入模式
| ^ |
| | |
| 按 : |
v v
命令模式(末行模式) <---- 按 Esc
(保存、退出、搜索替换)
- 普通模式(Normal):默认进入的模式,用来移动光标、删除、复制、粘贴,是 vim 的核心效率区。
- 插入模式(Insert):按
i进入,可以像普通编辑器一样打字;按Esc回到普通模式。 - 命令模式(Command-line/末行模式):按
:进入,在底部出现命令行,用来保存、退出、搜索替换等。
跟着做
步骤 1:安装与确认
which nano # 几乎预装
which vim # 检查 vim 是否安装
sudo apt update && sudo apt install vim nano -y
步骤 2:nano 极速上手——改 Nginx 配置
nano /tmp/nginx-test.conf
在 nano 中输入以下内容:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
}
}
保存并退出:
Ctrl+O(Write Out),回车确认文件名Ctrl+X退出
常用快捷键:
Ctrl+K:剪切当前行Ctrl+U:粘贴Ctrl+W:搜索Ctrl+V/Ctrl+Y:下翻/上翻页Alt+U/Alt+E:撤销/重做(新版 nano 支持)
步骤 3:vim 基础流程——创建并编辑一个脚本
vim /tmp/backup.sh
进入 vim 后:
- 默认是普通模式,按
i进入插入模式(光标前插入) - 输入脚本内容:
#!/bin/bash
DATE=$(date +%Y%m%d)
tar czf /backup/app-${DATE}.tar.gz /opt/app/
echo "Backup completed at ${DATE}"
- 按
Esc回到普通模式 - 按
:wq回车保存并退出(write and quit)
如果改错了不想保存:
:q!强制退出不保存(quit without saving):w只保存不退出
步骤 4:vim 普通模式的核心操作
vim /tmp/backup.sh
在普通模式下(按 Esc 确保):
移动光标:
h 左 j 下 k 上 l 右(比方向键快,手不离开主键区)
w 跳到下一个单词开头
b 跳到上一个单词开头
0 跳到行首
$ 跳到行尾
gg 跳到文件第一行
G 跳到文件最后一行
:5 跳到第 5 行
编辑:
x 删除当前字符
dd 删除当前行(其实是剪切,可粘贴)
yy 复制当前行
p 在光标后粘贴
u 撤销
Ctrl+r 重做
进入插入模式的不同方式:
i 光标前插入
a 光标后插入
o 在当前行下方新开一行插入
I 在行首插入
A 在行尾插入
O 在当前行上方新开一行插入
步骤 5:vim 搜索与替换
在普通模式下:
/nginx # 按 / 后输入 nginx,回车,向下搜索
?proxy # 按 ? 后输入 proxy,向上搜索
n # 下一个匹配
N # 上一个匹配
:%s/8080/9090/g # 全局把 8080 替换为 9090
:%s/server_name/Server_name/gc # 逐个确认替换(c = confirm)
步骤 6:vim 高级技巧——多行注释与缩进
多行注释(普通模式):
Ctrl+v # 进入可视块模式
上下箭头选中多行
Shift+i # 大写 I,进入插入模式
输入 #
Esc # 稍等片刻,所有选中行都加上 #
多行缩进:
普通模式下选中多行(如 5ggV20G,选中第5到20行)
> # 右缩进
< # 左缩进
步骤 7:选择你的编辑器
sudo update-alternatives --config editor # 查看/设置系统默认编辑器
场景速查:
- 临时改一个配置文件的一行:nano
- 写 shell 脚本、批量编辑、大文件:vim
- 写代码(本地开发):VS Code + Remote-SSH 插件连服务器
讲清楚要点
- nano 的学习曲线接近 0:底部菜单实时显示快捷键,
^就是Ctrl,M-就是Alt。适合初学者和不常用 Linux 的人。 - vim 的效率来自模式隔离:普通模式下所有按键都是命令,不需要按
Ctrl组合,手指不离开主键区就能完成 90% 的操作。 - vim 的插入模式有六种入口:
i/a/o/I/A/O分别控制插入位置,熟记i(当前光标前)和a(当前光标后)就能应付大部分场景。 :wq、:q!、:x的区别::wq无条件保存并退出;:q!强制不保存退出;:x只在有修改时才写盘,比:wq更优雅。- vim 的撤销树比大多数编辑器深:按
u撤销,Ctrl+r重做,误删一大段内容时这是救命稻草。 - 复制粘贴的寄存器逻辑:
dd是剪切,yy是复制,p在当前行下方(或光标后)粘贴。"+yy可以复制到系统剪贴板(需支持 clipboard 的 vim)。 - 不要在生产环境用 vim 练手:先在
/tmp下创建测试文件练熟:q!和:wq,再碰/etc/nginx/nginx.conf这种关键配置。
你可能会懵的地方
-
我按了
i能打字,但按方向键变成 ABCD? 你用的是vi而不是vim,或者是一个精简版 vim。解决:sudo apt install vim安装完整版。 -
怎么退出 vim?网上说玩笑说很多人卡在 vim 里出不来 没保存的改动用
:q!强制退出;已保存的用:q或:x。最保险的:先按Esc(可能按两次),再敲:q!回车。 -
vim 里怎么复制到本地电脑的剪贴板? 通过 SSH 连接时,vim 的
"+y通常不能直接复制到本地。解决:用鼠标选中终端内容复制;或者本地用 VS Code Remote-SSH 打开文件编辑。 -
nano 里怎么撤销? 新版 nano(Ubuntu 22.04+)支持
Alt+U撤销,Alt+E重做。老版不支持,所以大改前建议先备份文件cp file file.bak。 -
为什么服务器上宁愿用 vim 也不用 VS Code? 生产服务器通常只有命令行(无图形界面),网络带宽有限,且安全策略不允许随便装图形工具。vim 是保底技能。
错法对照
| 错法 | 问题 | 正解 |
|---|---|---|
在 vim 插入模式里按 :wq | 插入模式下输入的是文本,不是命令 | 先按 Esc 回到普通模式,再按 :wq |
vim /etc/nginx/nginx.conf 改完直接关终端 | 可能没保存,且会产生 .swp 交换文件 | 正确保存退出 :wq 或放弃 :q! |
nano 里按 Ctrl+S 想保存 | Ctrl+S 在终端里是暂停输出(XOFF),界面会卡住 | nano 保存是 Ctrl+O,退出是 Ctrl+X |
| vim 里用方向键移动 | 可以,但手离开主键区,效率低 | 用 hjkl 移动,这是 vim 的设计初衷 |
:Wq 或 :WQ | vim 命令区分大小写 | :wq 全小写 |
卡点急救
-
现象:vim 打开文件提示「Found a swap file」 上次的编辑会话异常退出(如 SSH 断开),留下
.swp文件。解决:如果只是查看,按R恢复;如果确定不需要恢复,删除交换文件:rm /tmp/backup.sh.swp(路径在提示中会给出)。 -
现象:nano 界面卡住,按什么都没反应 可能误按了
Ctrl+S(暂停终端输出)。解决:按Ctrl+Q(XON)恢复。 -
现象:vim 里中文显示乱码 文件编码和 vim 编码不一致。解决:在 vim 里执行
:set fileencoding=utf-8和:set encoding=utf-8;或在~/.vimrc里永久添加set encoding=utf-8。
面试常问
-
vim 的三种模式是什么?如何切换? 普通模式(默认,移动/删除/复制)、插入模式(按
i/a/o进入,编辑文本)、命令模式(按:进入,保存/退出/搜索替换)。插入模式和命令模式都按Esc回到普通模式。 -
你在生产环境修改配置文件的标准流程? 先备份:
cp nginx.conf nginx.conf.bak.$(date +%F);再用 vim 编辑;修改后先检查语法(如nginx -t),确认无误再重载服务(systemctl reload nginx)。绝不直接修改不备份。
自测三问
- 用 nano 打开文件后,如何保存并退出?如果改错了不想保存呢?
- 在 vim 普通模式下,如何把光标快速跳到文件最后一行?如何快速删除一整行并粘贴到下一行?
- 修改
/etc/mysql/mysql.conf.d/mysqld.cnf这类关键配置前,你应该先做什么?
小结一句话
nano 是救急用的瑞士军刀,vim 是 Linux 世界的通用语言——至少学会打开、编辑、保存、退出,服务器上你就不会手足无措。
延伸
- GNU nano 官方文档
- Vim 官方文档
- Vimtutor 交互式教程(终端里直接敲
vimtutor) - 下一课:用户与权限——理解 chmod、chown 和 sudo,保护你的服务器不被误删。