CodeRoad Map 程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。
由 程序员柏风 独立维护 · 关于作者
学习 更多
文本编辑器 — CodeRoadMap
文本编辑器
这一课你将能做到
使用 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
默认是普通模式,按 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 普通模式的核心操作 移动光标:
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 或 :WQvim 命令区分大小写 :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 世界的通用语言——至少学会打开、编辑、保存、退出,服务器上你就不会手足无措。
延伸