我很少见过有工具像 Vim 一样,让人一边骂一边又离不开。刚接触那阵,我连退出都不会,对着终端里的光标发呆,最后直接关掉窗口;可一旦熬过最初几天,回头再碰鼠标驱动的编辑器,反而觉得浑身不自在。这篇不是 Vim 教程的堆砌,而是把我从“只会打开文件”到“能靠它完成日常开发”的整个过程拆开来讲——包括那些让我卡壳的认知误区、真正用得上的命令、以及一个合理的配置方案。如果你正打算学 Vim,或者学了几天还在纠结“这东西到底好在哪”,这篇应该能帮你少走不少弯路。
1. 为什么这么多年过去了,还有人死磕 Vim
1.1 Vim 解决的从来不是“好看”的问题
很多第一次打开 Vim 的人,第一反应是这界面太朴素了,连个文件树都没有,配色也不现代,凭什么还有人坚持用。但 Vim 的核心价值从来不在界面,而在输入效率。图形化编辑器大多依赖鼠标完成很多操作,选中、滚动、点击菜单,每一下都要把手从键盘挪到鼠标再挪回来,一次两次无所谓,一天下来累积的切换成本相当可观。Vim 的思路是让手尽量不离开键盘主区域,所有移动、编辑、保存、切换窗口都通过组合键完成,让思维到操作的链路更短。
还有一个常被忽略的点:Vim 几乎无处不在。本地终端里有 vim,服务器上是 vim,容器里最小镜像也带 vi,连很多云开发环境默认编辑器也是它。这意味着学会 Vim 等于在几乎所有 Linux/Unix 场景下都有了“盲打”能力,不需要因为换台机器、换套环境就重新适应编辑器。这种通用性,才是它活了几十年仍然无法被替代的根本原因。
1.2 那些“用 Vim 写代码很搞笑”的误解
不少人觉得 Vim 只适合改配置文件、应急服务器操作,真正写大型项目还得靠 IDE。这个说法对,也不对。如果你整只手都放在方向键上、每次编辑都进插入模式打一个字再退回普通模式,那写复杂代码确实费劲。但如果把 Vim 的组合操作练成肌肉记忆,配合 ctags、LSP 插件、模糊搜索,它完全能承载日常开发。我见过有人用 Vim 写 Go 服务,也见过有人用 Vim 写前端,关键是建立一套适合自己的操作节奏。
另外有人说 Vim 的学习曲线太陡。我承认早期确实陡,但这种“陡”更多来自新模式——大部分人从记事本时代就习惯了“打开就能打字”,Vim 却要求你分清“普通模式”和“插入模式”,这个思维切换是最大的门槛。可一旦跨过去,后续的收益几乎是几何级的,因为移动、复制、删除、替换的尺度可以从“字符级”直接跳到“单词级”“段落级”,整块整块地操作文本,那种爽快感是普通编辑器很难给的。
1.3 学 Vim 最合理的姿势:当作“第二输入法”
把 Vim 看成输入法可能最容易理解。拼音输入法大家都会,但真正打字快的人要么练过双拼,要么练过五笔,核心目的就是减少击键次数、降低思维到文字的延迟。Vim 就是文本编辑领域的“双拼”:同样一句代码,别人可能需要移动光标到行尾,再按回车、补一个分号,而你可以直接 A; 一步完成。它不强迫你放弃其他工具,但值得你每天抽出一点时间,在真实编辑场景里有意识地用,直到某天发现不再想起“Vim 怎么退出”这个问题,而开始想“这道改动怎么用最少的键完成”时,就算真正入门了。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 模式切换:Vim 的高墙与入口
2.1 四个模式,别被吓到
Vim 最核心的概念就是“模式”,这也是它和普通编辑器最大的分水岭。默认打开是普通模式(Normal),此时按键盘不会输入文字,而是执行命令,比如 j 是下移一行,w 是跳到下一个单词开头。按 i 进入插入模式(Insert),这时候才能正常打字,和普通编辑器一样。按 v 进入可视模式(Visual),用方向键或 hjkl 选中文本,选中后可以统一删除、复制、替换。按 : 进入命令行模式(Command-line),执行保存、退出、搜索替换、设置参数等操作。
很多人初学时的痛苦就是把这几个模式的切换搞混,尤其是不小心按了 Caps Lock 或 I 之类,发现输入变得奇怪,其实只是模式不同。我的建议是初期强迫自己只记住两件事:普通模式管移动和操作,插入模式管打字。编辑完一段立刻按 Esc 回普通模式,再想下一步动作。等这两个模式玩顺了,再慢慢体会可视模式和命令行模式的高级玩法。
2.2 为什么 hjkl 比方向键更科学
Vim 用 h、j、k、l 分别代表左、下、上、右,这个设计被无数人吐槽过,觉得反直觉。但只要把手放回标准指位——右手食指放在 j 上,中指放在 k 上,无名指放在 l 上,食指向左摸到 h——你会发现移动光标时手根本不用离开主键盘区,连续按 jj 或 kk 上下翻行时,手指几乎不用换位。这种极致的击键效率,就是 Vim 所有操作哲学的起点:能用主键盘解决的事,绝不让手去够上下左右。
熟悉之后,你会慢慢发现 hjkl 只是最基础的移动,真正提升效率的是以单词、句子、段落为单位的跳转。普通模式下按 w 跳到下一个单词开头,b 跳回上一个单词开头,e 跳到当前单词末尾,) 和 ( 可以整句跳跃,} 和 { 可以整段跳跃。配合数字前缀,比如 5w 直接前进五个单词,10j 向下移动十行,操作一步到位,完全不用连续按键或滚动屏幕。
2.3 插入模式的入口不止 i 一个
很多新人学到这里就满足了——普通模式移动,按 i 插入,Esc 回来,再移动。其实 Vim 在插入模式的入口设计上做得非常细,每个入口都对应一种“从当前位置开始编辑”的意图。a 是当前字符后插入,A 是跳到行尾插入,I 是跳到行首插入,o 是向下新建一行并进入插入模式,O 是向上新建一行。举个例子,你想在代码行末尾补一个分号,最自然的操作是 A 然后输入 ;,而不是先移动到最后一个字符后面再按 i。长期下来,这类“意图化”操作会显著减少击键次数。
还有一种容易忽略的入口是 c,它负责“修改”。cw 表示删除当前单词并进入插入模式,cc 是删除整行并进入插入模式,c$ 是删除光标到行尾并进入插入模式。普通编辑器里,这个动作通常需要“选中 + 删除 + 进入输入状态”三步,Vim 用一个组合键就完成了。理解这些入口背后的意图,比死记命令更重要:i 是“插”,a 是“追加”,o 是“开新行”,c 是“改”。
3. 常用命令别只背清单,要按场景去记
3.1 移动与定位:从字符级到文件级
移动命令是 Vim 里最值得投入时间记忆的部分,因为每次编辑前都要先找到目标位置。除了 hjkl 和 w/b/e 这些基本款,还有不少高效武器:0 跳到行首,$ 跳到行尾,gg 跳到文件第一行,G 跳到文件最后一行,Ctrl+d 向下翻半屏,Ctrl+u 向上翻半屏,Ctrl+f 整页向下,Ctrl+b 整页向上。还有强大到几乎必备的搜索定位:按 / 输入关键词回车,就能全文搜索,n 跳到下一个匹配,N 跳到上一个匹配,配合 # 和 * 可以快速搜索光标所在的单词,这在代码里查函数引用、查变量名时极其好用。
定位到具体行可以用 :行号,Vim 左下角会直接跳过去;如果开了行号显示,还可以配合数字 + G 一步到位,比如 42G 直接到第 42 行。对于日常阅读长文件,我常用的组合是 :set number 打开行号,然后靠搜索和 gg/G 宏观跳转,再用 Ctrl+d/u 做半页浏览,几乎不需要滚轮或方向键。
3.2 删除、复制、粘贴的“文本对象”思维
Vim 效率的另一个秘密是“文本对象”。普通编辑器选中的单位通常是字符或整行,Vim 却可以按单词、引号、括号、标签为对象来操作。比如 diw 表示删除光标所在的单词,ci" 表示修改双引号内的内容,da( 表示删除包括括号在内的整个括号块,yit 表示复制 HTML 标签内的全部内容。这套语法极度统一:第一个字母是操作(d 删除、c 修改、y 复制),第二个字母是范围(i 内部、a 包括边界),第三个字符是对象(w 单词、引号、括号、t 标签)。
这种思维一旦建立,很多复杂编辑会变成几个键的事。比如你想把一段文字里的引号内容全部改掉,普通做法是鼠标选中再删除再输入,Vim 里直接 ci" 就能清空引号内并进入插入状态;想删除一个函数体,先让光标停在大括号上,di{ 就完成了(内部删除),da{ 则连大括号一起删除。刚开始可能不习惯这种“对象”思路,但熟练后会发现它非常贴合代码的语法结构,改起来特别顺手。
3.3 批量替换与全局命令:别再一行行改了
搜索替换是高频操作,Vim 的 :s 命令可以优雅地完成。最基础的用法是 :s/旧/新/ 替换当前行第一个匹配,加上 g 后缀变成 :s/旧/新/g 替换当前行全部匹配。要处理整个文件,用 % 前缀::%s/旧/新/g。更进一步,末尾加 c 会逐个询问确认,大范围替换时这个选项能帮你避免误伤。比如 :%s/foo/bar/gc,Vim 会逐个显示匹配项,按下 y 替换、n 跳过、q 退出,非常安全。
全局命令 :g 也值得了解。:g/pattern/command 表示对所有匹配 pattern 的行执行 command。比如想删除所有含 TODO 的行,直接 :g/TODO/d;想把所有含 error 的行前面加个注释符号,用 :g/error/s/^/#/。这类按模式批量操作的能力,在整理日志、清理配置、重构代码时几乎是神器,比手动扫一遍文件高效得多。
3.4 保存退出和应急操作:必须形成条件反射
很多新手在 Vim 里卡住,就是因为保存退出没形成条件反射。写入文件是 :w,退出是 :q,合并成 :wq,强制不保存退出是 :q!。还有一个更快的 ZZ(大写)等价于保存退出,ZQ 等价于不保存退出,不用按冒号,习惯之后手指会自然记住。如果你误改了文件想放弃所有修改,:e! 能重新加载磁盘上的版本,这招比手动撤销几百次靠谱得多。
还有一个应急操作:按了 Esc 发现没反应,或者进入了奇怪状态,先别慌。按 Ctrl+c 或 Esc 能回到普通模式,按 u 能撤销,Ctrl+r 是重做。万一屏幕上出现 RECOVER 之类的提示,说明上次编辑产生了交换文件,可以直接按 R 恢复,也可以按 D 删除交换文件后重新打开。这些场景虽然不多,但关键时刻能救命。
4. 从零搭一套顺手可用的 Vim 配置
4.1 先别追求“编辑器即 IDE”,把基础体验拉满
网上流传的 vimrc 动辄几百行,插件列表一长串,新手照抄很容易迷失。我的建议是分阶段来:第一阶段只做基础体验优化,目标是把 Vim 变成日常写码不难受的编辑器。至少要有这几个配置:
vim复制" 基础设置
set number " 显示行号
set relativenumber " 相对行号,方便配合数字跳转
set autoindent " 自动缩进
set smartindent " 智能缩进
set tabstop=4 " Tab 宽度为 4
set shiftwidth=4 " 自动缩进宽度为 4
set expandtab " 用空格代替 Tab
set ignorecase " 搜索时忽略大小写
set smartcase " 但大写字母时区分大小写
set hlsearch " 搜索结果高亮
set incsearch " 边输入边搜索
set scrolloff=5 " 光标上下保留 5 行
set showmode " 显示当前模式
set showcmd " 显示不完整命令
set clipboard=unnamedplus " 使用系统剪贴板
set mouse=a " 终端下启用鼠标(可选)
其中相对行号这点我想多说一句。开了 relativenumber 后,左侧显示的是“当前行距离目标行还有多少行”,配合数字 + 移动命令非常舒服,比如“往下改 12 行”直接 12j。很多新手觉得行号只是辅助,其实在 Vim 里它直接参与操作逻辑,属于效率杠杆。
vim复制" 基础的按键映射
inoremap jj <Esc> " 插入模式下按 jj 快速回到普通模式
nnoremap <space> za " 普通模式下空格键展开/收起折叠
inoremap jj
4.2 插件管理器:推荐 vim-plug,别折腾复杂框架
插件管理器的选择上,我最常用的是 vim-plug,理由很简单:单文件、配置直观、安装方便。安装方案是把 vim-plug 的脚本下载到 autoload 目录,然后在 vimrc 里写插件列表,执行 :PlugInstall 就能全部装完。vim-plug 的写法很清晰:
vim复制call plug#begin('~/.vim/plugged')
Plug 'preservim/nerdtree' " 文件树
Plug 'nvim-treesitter/nvim-treesitter' " 语法高亮增强
Plug 'neoclide/coc.nvim', {'branch': 'release'} " 补全和 LSP
Plug 'junegunn/fzf.vim' " 模糊搜索
call plug#end()
新手配置插件最容易踩的坑是装太多。我见过有人一口气装了二十多个插件,结果打开文件都卡顿,最后根本不知道哪个有用。建议遵循“按需添加”:先装一个文件树、一个补全、一个搜索、一个状态栏,等真正用到某个功能时再去翻插件市场,而不是提前把别人清单里的全搬过来。
4.3 补全、语法检查、模糊搜索:把 Vim 拉回现代开发
如果只在 Vim 里改改简单文本,不装补全也还行;但要写正经代码,至少需要一个补全方案。我目前主力用的是 coc.nvim,它基于 Node.js,内置了 LSP 客户端,装好对应语言服务器后,能提供和 IDE 接近的补全、跳转定义、查找引用、错误提示。装好后按 gd 跳转定义,K 查看文档,:CocDiagnostics 查看诊断信息,体验已经不输大型 IDE。
模糊搜索我用 fzf.vim。按 Ctrl+p 调出文件搜索,输入几个字符立刻列出匹配文件,回车打开;:Rg 可以在项目内容里全文搜索,相当于命令行版的项目内搜索。这俩组合起来,日常打开文件、定位代码的效率非常高,几乎不需要手动找到文件树再点开。
文件树方面 NERDTree 是老牌选择,现在也有人用 nvim-tree(Neovim 专属)或 coc-explorer。我的看法是:文件树更多是用来浏览项目结构,真正打开文件靠模糊搜索更快。所以即使不装文件树,只装 fzf 也能活得很好,不要让文件树占用过多屏幕空间。
4.4 一份可落地的 vimrc 片段:照着抄就能用
我整理了一份接近日常使用的 .vimrc 片段,里面没有花哨的东西,但每一项都有实际用途:
vim复制set number relativenumber
set autoindent smartindent expandtab tabstop=4 shiftwidth=4
set ignorecase smartcase hlsearch incsearch scrolloff=5
set backupdir=~/.vim/tmp,~/.tmp,.
set undofile
set undodir=~/.vim/undo
set hidden
set showcmd showmode
set signcolumn=yes
" 按键映射
let mapleader=" "
inoremap jj <Esc>
nnoremap <leader>w :w<CR>
nnoremap <leader>q :q<CR>
nnoremap <leader>pv :Ex<CR> " 打开内置文件浏览
" 移动习惯优化
nnoremap J 5j
nnoremap K 5k
vnoremap J 5j
vnoremap K 5k
" 窗口操作
nnoremap <leader>s :split<CR>
nnoremap <leader>v :vsplit<CR>
nnoremap <leader>x :close<CR>
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l
这里把空格设成了 leader 键,这是我个人习惯。还有一点:set hidden 很关键,它允许你切换文件时保留未保存的更改在后台,不会因为忘了写盘而被打断。undofile 会把撤销历史写到磁盘,哪怕关掉文件重新打开,之前的撤销记录还在,长期写码时非常有用。没有这些细节,Vim 用起来总觉得别扭,加上之后才谈得上“顺手”。
5. 进阶工作流:宏、多文件与真实场景实战
5.1 宏:把重复性操作录成“磁带”
宏是 Vim 被严重低估的功能。它的理念很简单:把一串操作录下来,然后对多行或多处重复播放。普通模式下按 q 再加一个字母开始录制,比如 qa;此时 Vim 会记录后续所有操作,再按一次 q 结束录制;最后用 @a 播放宏,用 5@a 连续播放五次。录制宏最典型的场景是批量处理逐行文本:每行都要做同样的移动和修改,录一次,然后批量放。
举个例子,想把一个 CSV 文件的每行第二列和第三列交换位置,如果手动做一百行,人会疯掉。这时可以先把光标移到第一行,按 qa 开始录制,执行一次完整的交换操作,再按 q 结束,然后把光标移到第二行,按 100@a。整个流程看着第一次操作,后面全是自动化。初学者常犯的错是录制前没把光标放到合适位置,导致宏在不同的行开始位置不同,处理结果错乱。养成习惯:录制前先想清楚“每次执行时光标在哪个位置”,宏才会稳定。
5.2 多文件编辑:缓冲区、窗口和标签页的取舍
Vim 里打开多个文件后,缓冲区(buffer)管理就变得重要。:ls 能列出所有缓冲区,:b 加编号或文件名可切换,:bn 下一个,:bp 上一个,:bd 关闭缓冲。窗口(window)是把同一个 Vim 进程分割成多个视口,用 :split 横向分割、:vsplit 纵向分割,然后通过 Ctrl+w 加方向键在窗口间跳转。标签页(tab)则更像浏览器标签,:tabnew 打开新标签,gt 切换,适合组织完全不同的任务上下文。
我个人在开发时习惯用“一主一副”的窗口布局:主窗口写代码,副窗口跑测试或预览。这样不需要频繁切换缓冲区,代码上下文更连贯。标签页我用得不多,因为窗口和缓冲区已经能满足绝大多数场景;若你习惯多任务并行,可以试试标签页。关键是要找到顺手的组合,不要每样都想要,操作复杂度会无限膨胀。
5.3 从“编辑器”到“开发环境”:LSP、调试和终端集成
开发环境离不开调试和运行。Vim 不内置调试器,但可以通过插件集成。coc.nvim 生态里可以配置调试适配器;也可以结合 vimspector 或 vim-dadbod 等插件实现断点调试、数据库连接等功能。而运行命令最简单的方式是 :! 开头,比如 :!python % 就能运行当前 Python 文件;如果是长时间运行的命令,则可以开一个终端窗口,Vim 8.0 和 Neovim 都内置 :terminal,可在编辑器里直接打开 shell。这样切换编辑器、终端、浏览器的频率会大幅下降。
如果你用 Neovim,体验会更好,内置的终端模拟和 Lua 配置让整个环境更现代。不过 Vim 8 本身也在持续演进,两者选谁更多是习惯问题。我本人现在是 Vim 和 Neovim 换着用,配置文件尽量保持兼容,避免被工具绑定。
5.4 两个高频场景的完整操作演示
拿一个实际任务演示一下 Vim 效率:假设有一个配置文件,每行都是 key = value 格式,但 value 都套着单引号,你想把所有单引号改成双引号,并且只改 value 段,不动 key 的引号。一个做法是 :%s/=\s*'(.*)'/ = "\1"/,利用捕获组把 value 里的内容保留下来,再把单引号替换成双引号。整体一次替换搞定,比手动逐行改快太多。如果你不熟悉正则,可以先在单行上 :s 实验,确认无误后再加 % 应用到全文,这样更安全。
场景二:从日志文件中找出所有时间戳格式异常的行,并统计数量。可以用 :g/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/p 打印匹配行;更简单地,用 :%s/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}//n 中的 n 只统计不替换,底部会显示匹配了多少处。这种“用替换做统计”的用法知道的人不多,但处理文本型数据时很实用。
6. 避坑、提速与持续精进
6.1 十个 Vim 新手最容易踩的坑
我把这些年见过、踩过的新手坑总结成一份清单,每条后面备注应对策略:
| 坑 | 现象 | 解决办法 |
|---|---|---|
| 不会退出 | 按什么键都没反应 | 按 Esc 回普通模式,再 :q! |
| 误删不想删的内容 | 一按 d 文本消失 | 用 u 撤销,不要慌乱再按 |
| 大小写锁死 | 输入全变大写 | 按 Caps Lock 或 Esc 后再试 |
| 在插入模式按方向键 | 出现 A B C D 之类的字符 | 按 Esc 回普通模式再操作 |
| 搜索不到文本 | 明明有却找不到 | 检查 :set ignorecase 和 smartcase |
| 改动后不保存就切文件 | 提示 E37 | 用 :w 保存或 :set hidden |
| 不知道当前模式 | 屏幕下方没显示 | :set showmode |
| 粘贴代码缩进乱掉 | 缩进层层叠加 | 先 :set paste,粘贴完再 :set nopaste |
| 替换范围太大误改 | 大范围替换把不想改的也改了 | 加 c 确认,或用更精确的正则 |
| 插件装完没生效 | 打开文件没有变化 | 检查 vimrc 是否有 plug#end,重新 :PlugInstall |
6.2 怎么练才不会三天打鱼两天晒网
学 Vim 最忌讳“看完教程就以为自己会了”。真正有效的方法是把日常编辑场景拆小,每天刻意用 Vim 完成一个具体任务,比如只用于写笔记、只用于改 CSS、只用于编辑 Git 提交信息,逐步扩大适用范围。如果你是编程学习者,可以强制自己一周内所有代码都用 Vim 写,一开始会慢,但一周后基本能回到原来的速度,再往后就是纯赚。不建议学两天休息五天,那样永远停留在“会按 hjkl 但实际不敢用”的状态。
另一个要点是“一点一点加命令”。今天只练移动,明天只练删除,后天只练替换,把每条命令放在具体场景里反复用,形成条件反射。你有意无意地记住那些高大上的组合键之前,先确保能流畅完成进入文件、改几行、保存退出这套基础流程。基础牢了,后面的东西自然能长在习惯上。
6.3 从“用”到“懂”:读内置文档是最好的进阶之路
Vim 自带极其详尽的中英文帮助文档,很多人忽略了它。想了解某个命令的具体语法、选项和例子,只需在普通模式下按 :help 加命令名,比如 :help ci"、:help :s、:help registers。文档里不仅有语法说明,还有示例和注意事项,比大部分网络教程都权威。我到现在遇到冷门命令仍然会先查 :help,而不是急着搜索。
更深入一步,可以打开 :help user-manual 从头到尾读一遍,它有章节化组织的完整教学,包括参数、寄存器、自动命令、脚本编写等。读完不敢说成为 Vim 大师,但至少能理解 Vim 的设计哲学——一切操作都由动词、名词和修饰符组合而成,就像一门语言。理解了这套语言,遇到没有经验过的操作也能推理出合理的命令,不再依赖死记硬背。
6.4 把 Vim 的思维方式带进其他编辑器
学完 Vim 后,你会发现自己的编辑习惯发生了迁移:到任何编辑器里都会先想“光标怎么最快移到目标位置”,而不是无脑滚动;会想“这段重复操作能不能用宏/片段搞定”,而不是逐条手动。如今 VS Code、JetBrains 系列都有 Vim 模拟插件,你可以把 Vim 的按键习惯直接带进这些图形化环境,保留它们优秀的补全、调试、图形界面能力。我个人在团队协作时经常开着 Vim 插件,因为不管怎么切工具,手指的编排逻辑是一样的,省去很多重新适应的成本。
Vim 的思维方式其实是一种“最小击键量”意识:在动手编辑前,先问自己“我要对什么对象、做什么动词、范围多大”,然后组合成一个命令。这种意识和工具本身绑定得很深,一旦养成,换到任何编辑器都能受益。这也是为什么那么多资深开发者一用就是十几年,不是因为怀旧,而是因为这套思维真正提升了生产力。
6.5 最后分享一个小技巧:把快捷键贴在桌面上
如果你刚开始学,我的建议是把常用快捷键抄在一张纸上贴屏幕边。这不是丢人的事,每个 Vim 用户都经历过“记不住”阶段。我自己当时特地列了一张表:移动、删除、复制、粘贴、保存、退出、搜索、替换、窗口切换,都是最常用的,背着背着很快就不需要了。等基础命令不再需要看表,再往上加新的快捷键,如此反复,不知不觉就积累出完整的命令库。
我个人实际操作中的体会是,Vim 的进阶不是线性的,而是一段一段的“顿悟”:某天突然明白为何要分模式,某天突然发现批量替换能省这么多时间,某天突然觉得宏是万能的。每个顿悟都来自一次真实的编辑需求,而解决方案恰好就藏在 Vim 的命令设计里。所以不用急于求成,保持“每天多试一条命令”的心态,几个月后再回头看,你会惊讶于自己已经走了多远。
