你也许第一次在服务器上敲下 vi 这个命令的时候,心里想的只是“改一下配置文件”,结果屏幕上出现一个黑乎乎的画面,光标在左上角闪,按什么键都没有反应,满脑子只有一个念头:怎么退出vi?
这个场景太经典了。作为 Linux/Unix 系统里最老牌也最顽固的文本编辑器,vi 文本编辑器用了几十年,依然是系统管理员、运维工程师和开发者必须掌握的基础工具。它没有图形界面,没有下拉菜单,所有操作全靠键盘命令完成,学习曲线陡峭得让新人劝退。但正因为它稳定、轻量、无处不在,只要你还在和服务器打交道,就早晚要面对它。这篇文章不讲花活,就用最通俗的方式,把vi的核心逻辑、日常操作、配置技巧和那些踩过的坑一次说透。
1. vi到底是什么,为什么绕不开它
1.1 一个编辑器,凭什么让你专门学
vi 的全称是 Visual Interface,1976年由 Bill Joy 在 BSD Unix 上编写,是比很多读者父辈年龄还大的软件。它的设计理念是“在终端里高效地编辑文本”,所有功能都通过键盘组合完成,不依赖鼠标和图形界面。听起来很原始,但这也是它的核心竞争力:无论你是通过 SSH 登录到千里之外的云服务器,还是系统崩溃后在应急模式下手动修配置,只要有一个终端,vi 就能工作。
你可能会问:现在 VS Code、Sublime、Notepad++ 不都挺好吗,为什么要用vi?原因很直接:服务器上没有图形界面。你在生产环境中修改 Nginx 配置、调整 cron 定时任务、查看系统日志,用的都是命令行界面,唯一能用的文本编辑器就是 vi 或它增强版 vim。就算你想装一个轻量的 nano,很多最小化安装的发行版里也不一定预装,但 vi 是底线,几乎必装。学vi不是情怀问题,是生存问题。
1.2 vi 和 vim 的关系,以及你该学哪个
日常交流里,大家经常把 vi 和 vim 混着叫。其实 vim 是 Vi IMproved,也就是 vi 的增强版,加入了语法高亮、多窗口、可视模式、插件机制等一堆现代化功能,由 Bram Moolenaar 在1991年发布。现在的 Linux 发行版中,vi 命令往往是指向 vim 的软链接,或者至少装了一个 vim-tiny 来模拟 vi 的行为。
从学习的角度,我建议直接学 vim 的操作习惯,因为它兼容 vi 的所有基础命令,同时又多出很多提高效率的功能。你掌握了 vim 的操作,在任何环境下用 vi 命令都不会有障碍;但如果只学原版 vi,碰到 vim 的特性用不上,效率会差一截。我用vim十几年,几乎没有单独打开过纯vi,但 vi 这个命令我每天都在敲,因为服务器上的习惯就是打三个字母。
提示:系统里输入
vi --version能看到输出,第一行就会告诉你这是 vim 还是原版 vi。如果是 vim,还能看到功能特性列表;如果是原版 vi,基本只有一行版本号。绝大多数现代 Linux 发行版的结果都是 vim。
1.3 第一次打开vi,你看到的到底是什么
在你执行 vi 文件名 之后,屏幕上出现的画面可以分成几块来看:
- 最主体的大面积空白区域是编辑区,文件内容显示在这里;
- 底部一行是状态栏/命令行区域,显示文件名、行数、当前所处的模式等信息;
- 如果打开了多个文件或启用了某些选项,顶部和底部的边界还会显示文件名列表和状态提示。
我第一次用vi的时候,屏幕右下角会出现一个 -- INSERT -- 之类的标识,后来才知道这是告诉我当前处于“插入模式”。不同发行版提示不一样,有的显示 -- 插入 --,有的什么都不显示。但有一个原则是不变的:vi默认处于命令模式,就是你刚进入时按任何字母都不是输入文字,而是在执行命令。这个设定让很多人抓狂,也是“退出vi编辑模式”这个热搜词长期霸榜的根本原因。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 模式是理解vi的唯一钥匙
2.1 三种模式:命令模式、插入模式、末行模式
vi和现代编辑器的最大区别,就是它把“编辑文本”和“输入文本”分成了两种独立状态。你要先用命令告诉它“我要做什么”,再进入输入状态敲字。具体来说有三种模式:
| 模式 | 作用 | 如何进入 |
|---|---|---|
| 命令模式(普通模式) | 执行删除、复制、移动光标等编辑命令 | 打开vi后默认就在这个模式,按 Esc 可回到这里 |
| 插入模式(编辑模式) | 输入文字内容,和记事本打字一样 | 在命令模式下按 i、a、o 等键进入 |
| 末行模式(命令行模式) | 执行保存、退出、查找替换、设置选项等指令 | 在命令模式下按 : 进入,命令输入在底部 |
新手最容易绕晕的地方是:命令模式和插入模式之间来回切换,必须用 Esc 键作为“返回命令模式”的总闸。在插入模式里,你按的字母都变成了文字;按 Esc 之后,你又回到了命令模式,这时候按 dd 就会删掉整行,按 x 会删除光标下的字符。
可以这样理解:命令模式是“指挥模式”,你发出的每个按键都是给编辑器的指令;插入模式是“输入模式”,你敲的每一个键都是要写进文档的内容。这个心智模型一旦建立起来,vi的大部分操作逻辑就通了。
2.2 光标移动:用 hjkl 而不是方向键
新手很容易一进入vi就狂按方向键,结果发现光标能移动,但拇指和小指来回折腾不说,在有些迷你终端里方向键还会变成奇怪字符。vi 真正推荐的光标移动键是 h、j、k、l 四个字母,对应左、下、上、右四个方向。
为什么要用字母?原因有两个:一是早期键盘终端上没有独立方向键区,字母键是唯一选择;二是手不离主键区能大幅提升操作速度——你的右手放在字母区就能完成所有移动和编辑,不用伸向键盘右下角。这个习惯养成之后,你的编辑效率会有肉眼可见的提升。
除了单个字符移动,vi还提供了按词、按行、按句跳跃的移动命令:
w跳到下一个单词的词首,b跳回上一个单词的词首,e跳到单词词尾;0跳到当前行行首,$跳到当前行行尾;gg跳到文件第一行,G跳到文件最后一行,行号G跳到指定行;Ctrl+f向下翻页,Ctrl+b向上翻页;%在匹配的括号之间跳跃,编辑代码非常有用。
移动是命令模式里最重要的基本功,因为vi理念是“把光标移动到目标位置,再执行编辑命令”。你如果还习惯用方向键,我建议尽早换成hjkl,两周就能形成肌肉记忆。
2.3 删除、复制、粘贴与撤销:命令模式的四大金刚
在命令模式下,文本操作的快捷键不多,但组合起来威力巨大:
- 删除:
x删除光标所在字符,dd删除光标所在整行,dw删除光标后一个单词,d$删除光标到行尾,d0删除光标到行首。删除后内容其实被放进了寄存器,随时可以用p粘贴回去,所以dd也可以当作“剪切整行”来用。 - 复制:
yy复制光标所在整行,yw复制一个单词,y$复制光标到行尾。复制的动作和删除很像,只是命令由d换成y。 - 粘贴:
p在光标后粘贴,P在光标前粘贴。粘贴的内容来自你最后一次删除或复制的内容,这是最常用的组合:gg(回文件头)+yy(复制一行)+G(跳文件尾)+p(粘贴)。 - 撤销:
u撤销上一步操作,Ctrl+r重做。vi的撤销是分步的,不像有些编辑器是连续撤销到某个历史快照,所以频繁编辑时记得随手按u。
这套命令“动作+范围”的组合逻辑是vi的核心精髓:动词 d(删除)、y(复制)、c(修改),加位移目标 w(单词)、$(行尾)、j(下一行),就能组合出几十种操作。我刚学的时候死记硬背,后来突然想通了这一层,整个命令体系一下就串起来了。
3. 5分钟学会vi最常用操作
3.1 打开、输入、保存、退出:必修的生命周期
很多教程一上来就列几十条命令,反而把新手吓退。其实日常用vi,八成的场景只需要这几个步骤:
第一步,打开文件。 vi 文件名 如果文件不存在,vi会创建一个新的缓冲区,在你保存时才真正写盘。
第二步,进入插入模式。 输入 i(在光标前插入)、a(在光标后追加)、o(在光标下方新建一行并进入插入模式),其中的 o 特别常用,因为编辑时经常需要在新的一行开始写。
第三步,输入内容。 在插入模式里,一切和你用记事本没有区别。唯一要记住的就是:写完了按 Esc 回到命令模式。
第四步,保存退出。 在命令模式下按 : 进入末行模式,然后:
:w保存不退出;:wq保存并退出;:q直接退出(没有改动时才能成功);:q!放弃改动强制退出;:x相当于:wq,也是保存退出。
这里最让新手崩溃的就是 :q 报错。当你按 :q 想退出时,vi提示 No write since last change(有修改未保存),这时候你如果不想保留修改,就按 :q!。网上那些“怎么退出vi”的求助帖,九成都是卡在这一步,所以这个热词的答案其实就一句话:先按 Esc 回到命令模式,再按 : 进入末行模式,然后输入 q 或 wq,最后按回车。
提示:如果按了
Esc没反应,先别急着敲:,观察底部有没有-- INSERT --标识。如果你刚才就是在命令模式,按一下Esc只是清空了一个奇怪状态;最稳妥的办法是按两下Esc,确认回到命令模式再执行退出命令。
3.2 查找替换:改配置时最救命的功能
服务器上的配置文件动辄几百行,人工翻找指定的键值对太累了。vi的查找和替换功能能节省大量时间。
正向查找:命令模式下按 / 进入末行模式,输入关键词回车,光标会跳到第一个匹配的位置。按 n 找下一个,按 N 找上一个。比如编辑 nginx.conf 时输入 /listen,回车就能逐个查看所有监听端口配置。
反向查找:按 ? 输入关键词,会从当前位置向文件头部查找,导航逻辑与 / 相反。
全局替换:格式是 :%s/旧文本/新文本/g。这个命令目前是使用vi的人最常用的替换命令,我拆解一下:
%表示作用于整个文件,指定一个范围。你也可以用10,20表示第10到第20行,或者用.,$表示当前行到文件末尾。s是替换操作符(substitute)。旧文本是查找的目标,支持正则表达式。新文本是替换后的内容。g表示一行内所有匹配都替换。如果不加g,默认只替换每行第一个出现的匹配。- 末尾加
c则是确认模式:每次替换前都问你y(yes)还是n(no),大范围替换时防止误伤。
比如把配置文件里所有 localhost 换成 127.0.0.1,完整命令是:
vim复制:%s/localhost/127.0.0.1/g
回车之后,底部会提示一共替换了多少处,这个反馈很直观。我编代码时的习惯是替换前先 / 搜索一遍看看匹配量,否则一个正则写宽松了,替换了一大片不该动的地方,恢复起来得靠多次 u 撤销。
3.3 可视模式与多行批量操作
需要同时操作多行文本的时候,vi的可视模式能让你像在图形编辑器里拖鼠标一样选中一块区域再执行命令。
在命令模式下按 v 进入字符可视模式,然后移动光标(hjkl或方向键),你就会看到文本被高亮选中。接着你可以:
- 按
d删除选中内容; - 按
y复制选中内容; - 按
c修改选中内容(删除并进入插入模式); - 按
>增加缩进,按<减少缩进(这个在整理代码的时候非常好用)。
如果按 V(大写)进入行可视模式,选中整行;按 Ctrl+v 进入块可视模式,可以像操作表格一样选中一个矩形区域,对于批量修改多行前面的空格或前缀特别方便。比如很多yaml配置文件要求对齐,你选中若干行开头的空格,按 x 一次删掉,再按 I 在行首同时插入新字符。
可视模式可以说是vi从“能用”到“好用”的一道分水岭,掌握之后你会觉得vi面对复杂任务也不是那么可怕。
4. 打造自己的vi环境:vimrc配置
4.1 为什么要配置文件,配置文件在哪
每次打开vi,默认都是一副干净得近乎简陋的样子:没有行号,没有语法高亮,Tab 缩进是8格,操作体验和现代IDE差距明显。但你不需要每次打开都手动设置一遍,vi会把启动时读取的配置放在一个叫 .vimrc 的文件里(vi原版是 .exrc)。在主目录下创建这个文件,写入设置项,以后每次启动自动加载,vi就变成了你的个人风格。
查看配置文件的位置,最常用的是 $HOME/.vimrc。如果使用vim,读入顺序还涉及 /etc/vim/vimrc(系统级)等路径,但个人配置优先放在自己的主目录下,不会影响其他用户。
注意:如果你想改配置后立即生效,不需要重启vi。在命令模式下执行
:source ~/.vimrc或:so ~/.vimrc即可重新加载配置。这个操作我一天要执行十几次,改完配置顺手刷一下。
4.2 一份能直接用的入门vimrc
我拿出自己在新服务器上配置的简化版本,每一行都注释了作用,你可以直接复制到 ~/.vimrc:
vim复制" 基本设置
set nocompatible " 不与老vi保持完全兼容,启用vim新特性
set encoding=utf-8 " 内部编码使用UTF-8,避免中文乱码
set fileencodings=ucs-bom,utf-8,gbk,gb2312,latin1 " 打开文件时尝试的编码顺序
" 界面与显示
set number " 显示行号
set relativenumber " 相对行号,方便用数字跳行
set showcmd " 右下角显示未完成的命令
set cursorline " 高亮当前行,找位置方便
set laststatus=2 " 始终显示状态栏
" 缩进与编辑
set expandtab " Tab键转换为空格
set shiftwidth=4 " 每次缩进的列数
set tabstop=4 " 一个Tab占4列
set autoindent " 自动缩进,换行时保持当前缩进级别
set softtabstop=4 " 退格键一次删除4列空格
" 搜索
set hlsearch " 搜索结果高亮
set incsearch " 输入搜索词时实时高亮
set ignorecase " 搜索时忽略大小写
set smartcase " 但输入大写字母时,转为精确区分大小写
" 其他实用项
set mouse=a " 允许鼠标操作(终端支持时)
syntax on " 语法高亮
set wildmenu " 命令行补全增强
这份配置没有引入任何插件管理器和外部插件,但已经解决了绝大多数新人最难受的问题:行号、缩进、搜索高亮和中文编码。特别是 set encoding=utf-8 和 fileencodings 那一行,处理服务器上的中文文件乱码几乎一劳永逸。
4.3 中文编码问题:一个让无数人栽坑的细节
我在处理“使用vi文本编辑器”这个话题时,发现不少人提到的报错是 error while installing 'chinese (simplified) (简体中文) language pack for vi,这其实不是一个vi本身的报错,而是在安装第三方vim中文语言包或某些发行版软件包时出现的依赖问题。
先解释语言包本身:vim官方并不把界面翻译成中文,所谓的“中文语言包”,通常是指将vim的菜单和帮助文档翻译成简体中文的插件包。安装这类包时,常见的方式是通过vim的插件管理器如Vundle、vim-plug,或者直接用包管理器安装 vim-common 附带的多语言支持。如果你看到 error while installing ... language pack for vi 这样的提示,多半是几个原因:
- 系统缺少依赖包,比如没有安装
gettext、gcc或make,导致编译或安装插件时失败; - 用户目录下的插件目录权限不对,vi无法写入
~/.vim或~/.vim/plugged; - 网络源的问题,语言包下载超时中断;
- 安装脚本要求的 vim 版本过低或过高,和语言包不兼容。
一个最稳妥的建议是:别折腾中文语言包,直接把vim的英文帮助文档用明白比什么都强。 vim的命令是全世界统一的,帮助文档是全英文的,但这恰恰是它的优势——网上任何一个技术帖子里的vim命令,你都能在本地对照。实在需要中文资料,搜对应关键词的博客文章比升级语言包简单得多。如果你确实想装,先安装依赖、确保网络通畅,再用插件管理器在 .vimrc 里加一行 Plug 'yianwillis/vimcdoc'(vim中文帮助文档插件),重新装载后执行 :source ~/.vimrc 和 :PlugInstall,比手动下载安装包省心得多。
实操心得:我在一台旧 CentOS 服务器上遇到过安装语言包时报错,最后发现是系统时间不对导致TLS证书验证失败,同步时间后重新执行安装就成功了。这种问题表面看是“语言包安装失败”,实质是底层的系统环境问题。所以排查时不要只盯着vi,先看报错日志尾部提示的缺失依赖,用
# 包管理工具把依赖补上再试。
5. vi常见问题与排查技巧实录
5.1 退出vi编辑模式:老生常谈却每年都在发生的痛点
前面提到,新手最常搜的问题就是“退出vi编辑模式”。这个现象背后其实有两个层面:
第一层是字面意思:用户按 i 进入了插入模式,打了一些字,不知道按什么键能退出这个“输入文字的状态”。答案就是按 Esc 回到命令模式。这是最基础的退出方式。
第二层是终极退出:用户想彻底退出vi,回到shell提示符。流程是 Esc 回到命令模式,再按 : 进入末行模式,输入 wq(保存并退出)或 q!(不保存强制退出)。我把两个退出命令的区别列一下:
| 需求 | 命令 | 场景 |
|---|---|---|
| 保存修改并退出 | :wq 或 :x |
改完配置,确认无误要保存 |
| 不保存退出 | :q! |
改错了或只是看了两眼,不想留改动 |
| 保存但不退出 | :w |
一边修改一边备份到磁盘 |
| 有修改但执意不存退出 | :q! |
放弃所有未保存修改 |
还有一个更隐蔽的情况:你在命令模式下按了多次不明按键,终端响了几声,屏幕状态栏出现 E486: Pattern not found 之类的信息,新手会以为vi卡死了。这时候按 Esc 清空命令行提示,回到命令模式再正常退出即可。vi几乎卡不死,它有明确的恢复机制,你反复按 Esc 一定可以回到命令模式,这一点是它的铁律。
5.2 编辑模式按键没反应,是哪里出了问题
另一个高频问题:在插入模式下按方向键,屏幕上出现 A、B、C、D 而不是移动光标。这通常发生在老式vi或未开启插件兼容设置的vim里。原因是方向键在终端里对应的是ESC [ A 这样的转义序列,但如果终端类型设置错误(比如 TERM=xterm 写成了 TERM=dumb),vim就无法正确解析。
解决方法有几个:
- 先检查终端类型:在shell里执行
echo $TERM,正常应该是xterm-256color或linux等; - 在
.vimrc中加入set t_Co=256或set nocompatible让vim正确处理终端控制序列; - 如果实在不行,切换方向键为
hjkl操作(其实我建议干脆就别用方向键了)。
如果连鼠标滚轮都没反应,看一下 set mouse=a 是否被注释或覆盖。有些远程终端工具需要在连接设置里开启鼠标报告协议。
5.3 其他高频问题速查表
平时在群里帮人看vi问题,最常见的就是下面这几种。我把解法整理成表格,方便你遇到时直接查:
| 现象 | 原因 | 解决方法 |
|---|---|---|
| 打开文件显示乱码 | 文件编码与vi默认编码不一致 | 用 :set encoding=utf-8 或 :e ++enc=gbk 重载 |
打开文件时提示 E212: Can't open file for writing |
当前用户没有写权限 | 检查文件所有者,或使用 sudo 重新执行vi |
| 删除键(Backspace)没反应 | vi默认的兼容模式砍掉了这个功能 | 在 .vimrc 中加 set backspace=indent,eol,start |
| 搜索高亮一直留在屏幕上 | 开启了 hlsearch |
用 :nohlsearch 临时取消,或搜索一个不存在的词 |
| Tab键变成8个空格那么宽 | tabstop 和 shiftwidth 没设置 |
在 .vimrc 中设置 set expandtab shiftwidth=4 tabstop=4 |
| 插入模式下方向键变成ABCD | no compatible 未设置 |
在 .vimrc 中加 set nocompatible |
退出时提示 No write since last change |
文件未保存 | 想保存输入 :wq,不想保存输入 :q! |
| vim命令找不到或没有 | 系统没有安装vim | 一般发行版输入 apt install vim 或 yum install vim-enhanced 即可解决 |
这里我得特别说一下 backspace 配置的坑,因为很多人打开vi往里面打字,发现敲错了想退格删除,光标纹丝不动,以为把系统搞坏了。其实vi的老逻辑里,Backspace在插入模式中的行为受 backspace 选项控制,默认在某些模式下不允许退格删掉前面缩进或换行字符。用上面表格里的 set backspace=indent,eol,start 就能放开,这个选项允许退格跨越自动缩进、行尾和已经输入的内容。
5.4 善用vi内置帮助,少走一年弯路
vi自带的学习路径其实被很多人忽略了。在命令模式下输入:
vim复制:help
你会进入一个帮助窗口,里面列了所有章节。如果只想查某个命令的详细说明,直接在末行模式输入 :help 关键字,比如 :help replace、:help vimrc、:help motion.txt。帮助文档是英文写的,但排版和示例很清晰,尤其是 quickref 章节把命令速查表列得明明白白:
vim复制:help quickref
我曾经整理过一版自己的速查表,后来发现用实时帮助反而更快,因为旧版本的配置不一定适用于新版本vim。建议你把 :help 当成字典,遇到不懂的命令第一时间查,比收藏一堆网文更有价值。
6. 实战场景:用vi完成三次真实任务
6.1 场景一:修改服务器上的网站配置文件
假设你的 Nginx 监听端口需要从 8080 改成 80,你 SSH 登录到服务器上,执行:
bash复制vi /etc/nginx/nginx.conf
打开文件后,先不要急着改。我建议的第一步是 /listen 搜索关键配置所在的行,找到对应的 listen 8080;。
把光标移到 8080 所在位置,按 cw(change word,修改单词),这时vi会删除 8080 并自动进入插入模式,你输入 80,按 Esc 回到命令模式。
如果文件里有多处端口要改,只改一个用上面方法;如果全部统一替换,用 :%s/8080/80/g。替换完成后,输入 :wq 保存退出。最后在shell里执行 nginx -t 检查配置语法,再 nginx -s reload 重载服务。
这个任务里 cw 这个组合命令是重点:它把“删除一个单词”和“进入插入状态”合并了,是vi里最顺手的高级操作之一。类似的组合还有 cc(修改整行)、c$(修改到行尾)、ciw(修改光标下的单词,无论光标在单词哪个位置)。
6.2 场景二:批量给日志文件加时间戳前缀
再举一个数据处理场景。有一个文本文件列出了几十个用户ID,每行一个,你想在最前面加上当前时间戳前缀。人工一个个改太蠢了,用块可视模式可以一次性解决。
按 Ctrl+v 进入块可视模式,用 j 往下移动选中多行的行首位置,按 I(大写i,在选中块的每一行行首插入),输入你的前缀文本,比如 [2025-06-01 09:00] ,然后按 Esc。vim会把所有选中行首同时插入同样内容。这个操作在维护批量清单、给代码批量加注释时超级好用。
这里容易犯的错是:按成小写 i 而不是大写 I。小写 i 表示在当前光标位置插入,只作用于一行;大写 I 才表示“在当前行行首插入”,在块可视模式里则作用于所有选中行行首。
6.3 场景三:多文件编辑与跳转
最后展示一下在项目里用vi打开多个文件并快速跳转。启动时一次打开多个文件:
bash复制vi main.py config.py helper.py
vi只显示第一个文件,在末行模式输入 :n 跳转到下一个文件,输入 :N 或 :prev 跳回上一个。输入 :ls 可以查看所有打开文件的列表,列表前面会显示每个文件的编号,用 :b2 直接跳转到2号文件。
如果需要同时看到两个文件,用 :sp(split)水平分屏,或 :vsp(vertical split)垂直分屏。分屏之后,用 Ctrl+w 加 h/j/k/l 在窗口之间跳转。这个功能在对比两个配置文件、对照着一个文件写另一个文件的时候特别有效。
多文件操作的新手提示::q 只会关闭当前窗口或当前文件,不会退出整个vim;要退出所有窗口,按 :qa(quit all),不保存退出所有文件用 :qa!。
7. 从会用vi到习惯vi,最后说几句体己话
写到这里,你已经掌握了vi的绝大多数日常操作:模式切换、光标移动、删除复制、查找替换、可视模式、配置文件实战。先说结论:vi一点也不神秘,它就是一个把按键效率发挥到极致的终端编辑器,你用三天的耐心换来的是一辈子的顺手。
我在实际使用中最大的感受是:vi真正的门槛不是命令数量,而是那种“先想清楚要做什么,再按命令去做”的交互习惯。 现代图形编辑器是所见即所得,你脑子里想到哪鼠标点到哪;vi是命令驱动,你得先告诉它操作对象在哪里、执行什么动作,然后它一次完成。这个习惯一旦养成,你会发现自己的编辑过程变得异常严谨,误操作反而更少。
如果是刚刚接触vi,我建议你别去背命令大全,就先用我讲的这些命令,硬着头皮在一周内把每天改配置、写脚本的任务都丢给vi。遇到不会的操作,按 u 撤销,按 Esc 回命令模式,用 / 搜你想知道的命令,再不行 :help 查。一周之后,你会习惯手放在字母区,眼睛盯着屏幕底部状态栏,那个场景下,你已经是个合格的vi使用者了。
关于那些“退出vi编辑模式”“安装中文语言包报错”的坑,本质上都是同一个问题:对vi的底层模式认知不清。把命令模式、插入模式、末行模式这三者的关系弄明白,vi这个工具在你手上就彻底解放了。之后你要做的,不过是把更多组合命令用熟,比如 diw(删除单词)、da"(删除双引号内内容)、ci((修改括号内内容)——这些都建立在今天的基础之上,属于你自己探索的乐趣了。
最后一条建议:给自己的 ~/.vimrc 养成写注释的习惯,因为配置会越来越长,三个月的你再回头看今天写的配置,会感谢现在的你给每一行都解释了作用。花一点时间维护好自己的vim环境,回报的是每次SSH到服务器时,那个最小但最可靠的编辑器,永远在那里等着你。
