乐于分享
好东西不私藏

【第06期】Linux下常用的文本编辑器vi/vim/nano使用详解

【第06期】Linux下常用的文本编辑器vi/vim/nano使用详解

接手运维工作的第一年,我至少见过三个同事因为编辑配置文件手抖,导致服务起不来,排查半天才发现是多打了一个空格,或者忘了保存。说实话,Linux 下的文本编辑器这东西,平时不觉得多重要,真到改 Nginx 配置、调 Crontab、排查日志的时候,谁用谁知道。今天这期,咱们不整虚的,直接把 vi、vim 和 nano 从基础操作到进阶技巧掰开揉碎讲清楚。看完之后,你至少能省下每天十几分钟的编辑时间。

一、vi 的历史与定位

vi 是 1976 年 Bill Joy 为 BSD Unix 写的编辑器,名字来自 “Visual”。它的核心设计理念是模式分离。在那个没有图形界面的年代,这种设计让编辑效率远超当时的行编辑器(如 ed)。现在的 Linux 发行版默认带的通常是 vim-tinyvi 的兼容版本,功能有限但足够应急。真正干活,建议装完整版 vim。

二、vim 三种核心模式详解

vim 之所以让新手头疼,就是因为它有模式切换。但一旦习惯,效率直接翻倍。

🔹 命令模式(Command Mode):打开文件默认就在这个模式。所有键盘输入都被解释为命令,而不是文字。这是 vim 的”默认状态”,按 Esc 可以确保回到这个模式(按两下更安全)。

🔹 插入模式(Insert Mode):按 i(当前位置插入)、a(光标后插入)、o(下方新开一行)进入。底部会显示 -- INSERT --,这时候才能正常打字。还有几个变体:I(行首插入)、A(行尾追加)、O(上方新开一行)。

🔹 末行模式(Last-line Mode):在命令模式下按 : 进入。光标跳到屏幕最下方,用于保存退出、全局替换、设置参数等高级操作。

三、命令模式高频操作

下面这些命令,记熟了基本能应付 90% 的日常编辑场景:

📍 光标移动hjkl 右。别笑,练熟之后右手根本不用离开主键盘区。w 跳到下一个单词开头,b 跳到前一个单词开头,e 跳到当前单词结尾。0 行首,$ 行尾,^ 行首第一个非空白字符。gg 文件开头,G 文件末尾,50G 跳到第 50 行,:50 也是跳到第 50 行。

✂️ 删除与复制dd 删除整行,3dd 删除 3 行。D 删除从光标到行尾。d$ 同上。d0 删除到行首。yy 复制整行,3yy 复制 3 行。y$ 复制到行尾。p 粘贴到光标下方,P 粘贴到上方。删除的内容其实被放进了寄存器,所以删除=剪切。

↩️ 撤销与重做u 撤销上一步,Ctrl+r 重做(取消撤销)。vim 的撤销树是带分支的,不是简单的线性历史,这意味着你撤销后再修改,原来的版本还在,只是访问不到而已。U(大写)可以撤销对整行的所有修改。

🔍 搜索/关键字 向下搜索,?关键字 向上搜索。n 下一个匹配,N 上一个。搜索会高亮所有匹配项,按 :noh 取消高亮。搜索支持正则表达式,比如 /^[0-9] 搜索以数字开头的行。

四、末行模式高级用法

末行模式是 vim 的”控制台”,能干的事情非常多:

💾 保存与退出:w 保存,:q 退出,:wq 保存并退出,:q! 强制退出不保存。遇到只读文件?用 :w!:wq! 强制操作(需要权限)。

🔄 查找替换:s/old/new 替换当前行第一个匹配,:s/old/new/g 替换当前行所有匹配,:%s/old/new/g 全局替换。加上 c 参数(:%s/old/new/gc)会逐个让你确认,生产环境改配置强烈建议加这个参数,防止误杀。

📋 实战:批量替换配置文件中的 IP 地址

:%s/192\.168\.1\.100/10.0.0.50/gc

注意 IP 中的 . 要转义成 \.,否则 . 在正则里匹配任意字符。加上 c 逐个确认,安全又高效。

五、vim 进阶技巧

🖥️ 分屏编辑:sp 文件名 上下分屏,:vsp 文件名 左右分屏。Ctrl+w w 在窗口间切换,Ctrl+w + 增大当前窗口,Ctrl+w - 缩小,Ctrl+w = 等分所有窗口。关窗口用 :q,只关当前窗口不影响其他文件。还可以 Ctrl+w H/J/K/L 把当前窗口移到指定方向。

📂 多文件编辑vim file1 file2 file3 同时打开多个文件。:n 下一个文件,:N 上一个,:args 查看文件列表。配合 :argdo 可以批量操作,比如 :argdo %s/old/new/g | update 批量替换所有文件并保存。:windo 对所有窗口执行命令,:bufdo 对所有缓冲区执行命令。

🎬 宏录制:这是 vim 最强大的功能之一。qa 开始录制宏到寄存器 a,执行一系列操作,按 q 结束录制。之后按 @a 重放宏,10@a 执行 10 次。比如批量给 100 行加前缀:移动到第一行,qaI# [ESC]j 录制,然后 99@a 搞定。宏可以嵌套调用,寄存器 a 的宏里可以调用寄存器 b 的宏。

📐 可视模式v 字符选择,V 行选择,Ctrl+v 块选择(列编辑)。块选择特别适合在每行开头加注释:按 Ctrl+v 进入块模式,选中多行第一个字符的位置,按 I 输入 # ,再按 Esc,所有选中行同时加上了注释符。

六、vim 配置文件调优

vim 的配置文件是 ~/.vimrc,加上以下配置能让体验提升几个档次:

set nu " 显示行号
set rnu " 相对行号(跳转超方便)
set ai " 自动缩进
set ts=4 " Tab 宽度 4 空格
set expandtab " Tab 转空格
set hlsearch " 搜索高亮
set incsearch " 搜索时实时匹配
set syntax on " 语法高亮
set backup " 编辑时自动备份
set backupext=.bak " 备份文件后缀
set showmode " 底部显示当前模式
set cursorline " 高亮当前行

推荐额外安装 vim-plug 插件管理器,然后装 NERDTree(文件树)、fzf(模糊搜索)、coc.nvim(代码补全),vim 直接变身 IDE。

七、避坑指南(血泪总结)

🚨 编辑前备份:重要配置文件编辑前先 cp config.conf config.conf.bak。vim 虽然能设 set backup,但不如手动备份保险。更狠一点:cp config.conf{,.bak.$(date +%F)} 带日期的备份,方便回溯。

🚨 权限问题:普通用户编辑 root 文件时,如果忘了加 sudo,改了半天发现保存不了。这时候别慌,在末行模式输入 :w !sudo tee % 就能用 sudo 保存当前文件,然后 :q! 退出重新打开即可。这条命令我救过不下十次。

🚨 交换文件:vim 异常退出后会留下 .swp 文件。下次打开会提示恢复,如果确认不需要,用 rm .文件名.swp 清理掉。生产环境建议在 .vimrc 里设 set directory=~/.vim/swap// 把交换文件集中管理。

🚨 编码问题:编辑中文文件时如果乱码,在末行模式试 :set fileencoding=utf-8:set fileencoding=gbk。永久解决可以在 .vimrc 里加 set encoding=utf-8

八、nano:新手友好的轻量级选择

nano 没有模式切换的概念,打开就能写,底部直接显示快捷键提示,对新手极其友好。大多数发行版都预装了 nano,轻量级容器里也常见。

⌨️ 核心快捷键^ 表示 Ctrl,M 表示 Alt/Meta):

🔹 ^O 写入文件(会提示确认文件名,直接回车确认)

🔹 ^X 退出,如果没保存会弹窗提示

🔹 ^W 搜索文字,搜索后按 Alt+A 可以批量操作匹配行

🔹 ^\ 查找替换,支持正则表达式

🔹 ^K 剪切当前行,^U 粘贴

🔹 M-u 撤销,M-e 重做(Alt+u / Alt+e)

🔹 M-a 开始选择文本块,M-6 复制,M-} 缩进

🔹 ^T 拼写检查(英文环境下有用)

🔹 ^C 显示当前光标位置(行号、列号、字符数)

🔧 调优 nano:默认 nano 界面比较简陋,可以在 ~/.nanorc 里加以下配置:

set linenumbers " 显示行号
set autoindent " 自动缩进
set tabsize 4 " Tab 宽度
set mouse " 启用鼠标支持
set smooth " 平滑滚动
set bracketed " 括号匹配高亮
set softwrap " 自动换行
include /usr/share/nano/*.nanorc " 语法高亮

加完这些,nano 的易用性会大幅提升,行号、语法高亮都有了。

📋 nano 实战:快速编辑 crontab

$ export EDITOR=nano
$ crontab -e

nano 打开 crontab 是最舒服的组合,底部提示清晰,不容易按错。改完 Ctrl+O 回车保存,Ctrl+X 退出,系统会自动检查语法并安装新的 crontab。

九、到底该用哪个?

🛠️ 日常运维、改配置、写脚本:闭眼选 vim。肌肉记忆形成后,速度远超鼠标操作。尤其是批量替换、分屏对比、宏录制这些功能,nano 根本比不了。

🐣 临时改一两行、服务器上没装 vim、团队新人多:用 nano。零学习成本,打开就能改,改完 Ctrl+O Ctrl+X 完事。

📦 极简环境(Docker Alpine 基础镜像):通常只有 vi(vim-tiny)。学会 i 编辑、Esc 退出、:wq 保存这三个命令就够应急了。

💡 建议学习路径:先用 nano 过渡,同时每天花 10 分钟练 vim 的 hjkl 移动和 dd/yy/p 操作。一周之后,你会发现已经离不开 vim 了。

📝 总结一下

编辑器只是工具,顺手才是王道。建议先在测试服务器上把 vim 的 hjkl 移动、dd/yy/p 删除复制粘贴、u/Ctrl+r 撤销重做、:wq 保存退出练熟。遇到不确定的修改,先备份再动手。熟练之后,你会发现自己已经离不开 vim 了。