第4章 Vim编辑器:三种模式、基本操作、配置与插件管理
说实话,Vim 这玩意儿,刚接触的时候真想砸键盘。
我记得第一次在服务器上编辑配置文件,光标不动,打不出字,按啥都没反应。旁边老工程师瞥了一眼:「你按 i 啊。」——从此我记住了 Vim 的「模式」这个概念。
但等你用顺了,你会发现 Vim 是真的快。手不离主键盘,鼠标?不需要。我现在的开发环境,IDE 都配了 Vim 插件。说白了,Vim 不是编辑器,是一种思维方式。
4.1 Vim 的三种核心模式
Vim 和普通编辑器的最大区别,就是它有「模式」。你想想看,普通编辑器你按键盘就是打字,但 Vim 里,按键在不同模式下干不同的事。
| 模式 | 作用 | 进入方式 |
|---|---|---|
| 普通模式(Normal) | 移动光标、复制粘贴、删除、撤销 | 启动 Vim 默认进入,按 Esc 返回 |
| 插入模式(Insert) | 输入文本内容 | 按 i、a、o 等 |
| 命令行模式(Command-line) | 保存退出、搜索替换、设置选项 | 按 :、/、? |
核心口诀:普通模式是「家」,插入模式是「干活」,命令行模式是「发号施令」。
4.2 基本操作:从打开文件到保存退出
我刚开始带新人时,发现很多人连退出 Vim 都不会。网上有个段子:「如何退出 Vim?」——答案是关终端。哈哈,其实没那么夸张。
4.2.1 打开与退出
vim filename # 打开文件
:q # 退出(未修改时)
:q! # 强制退出,不保存
:w # 保存
:wq # 保存并退出
:x # 同 :wq,但更简洁
我曾经在线上服务器改 nginx 配置,改完直接 :q 退出了,没保存。结果 reload 时报错,排查了半天才发现是文件没改上。从那以后我养成了习惯:改完先 :w,再检查一遍,最后 :q。
4.2.2 光标移动
普通模式下,移动光标不用方向键。为什么?因为手不用离开主键盘区,效率高得多。
h/j/k/l— 左 / 下 / 上 / 右w/b— 按单词前进 / 后退0/$— 行首 / 行尾gg/G— 文件开头 / 结尾Ctrl+f/Ctrl+b— 翻页
小技巧:数字 + 命令 = 重复执行。比如 5j 就是向下移动 5 行。我写代码时经常用 10k 快速回到上面某个函数。
4.2.3 编辑操作
| 操作 | 命令 | 说明 |
|---|---|---|
| 插入 | i / a / o |
光标前 / 后 / 新行插入 |
| 删除 | x / dd / dw |
删字符 / 删行 / 删单词 |
| 复制 | yy / yw |
复制行 / 复制单词 |
| 粘贴 | p / P |
光标后 / 前粘贴 |
| 撤销 | u |
撤销上一步操作 |
| 重做 | Ctrl+r |
恢复撤销 |
我个人习惯是:dd 删行,yy 复制,p 粘贴。这三个命令组合起来,重构代码特别快。你想想看,不用鼠标,不用选中,几秒钟就能把一段代码挪到别处。
4.3 Vim 配置:打造你的专属编辑器
Vim 默认配置其实挺素的。但你可以通过 ~/.vimrc 文件来定制。我每换一台新机器,第一件事就是把我的 .vimrc 拷过去。
4.3.1 基础配置示例
" 显示行号
set number
" 语法高亮
syntax on
" 自动缩进
set autoindent
set smartindent
" 制表符宽度
set tabstop=4
set shiftwidth=4
set expandtab
" 搜索高亮
set hlsearch
set incsearch
" 显示匹配括号
set showmatch
" 编码设置
set encoding=utf-8
避坑指南:我曾经在 .vimrc 里写错了配置,导致 Vim 启动报错。排查方法是:用 vim -u NONE 启动纯净模式,然后逐行加载配置。嗯,这个技巧救过我很多次。
4.3.2 常用配置项速查
| 配置项 | 作用 |
|---|---|
set number |
显示行号 |
set relativenumber |
相对行号(配合 5j 这类命令超好用) |
set cursorline |
高亮当前行 |
set ignorecase |
搜索忽略大小写 |
set smartcase |
智能大小写(混合输入时精确匹配) |
4.4 插件管理:让 Vim 脱胎换骨
Vim 本身是个编辑器,但加上插件,它就能变成 IDE。我建议用 vim-plug 来管理插件,轻量、简单、够用。
4.4.1 安装 vim-plug
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
4.4.2 配置插件
在 .vimrc 中添加:
call plug#begin('~/.vim/plugged')
" 文件树
Plug 'preservim/nerdtree'
" 状态栏美化
Plug 'vim-airline/vim-airline'
" 代码补全
Plug 'ycm-core/YouCompleteMe'
" Git 集成
Plug 'tpope/vim-fugitive'
" 注释插件
Plug 'preservim/nerdcommenter'
call plug#end()
然后执行 :PlugInstall,Vim 会自动下载并安装所有插件。
我个人习惯:插件不要装太多。装多了启动慢,还容易冲突。我一般只装 5-8 个核心插件,够用就行。你想想看,插件是工具,不是玩具。
4.4.3 常用插件推荐
| 插件 | 功能 |
|---|---|
| NERDTree | 文件浏览器,左侧目录树 |
| vim-airline | 底部状态栏,显示模式、文件名、行号 |
| YouCompleteMe | 代码补全,支持 C/C++/Python 等 |
| vim-fugitive | Git 集成,:Gstatus 查看状态 |
| nerdcommenter | 快速注释/取消注释,gc 快捷键 |
4.5 本章知识体系
下面这张图,是我自己总结的 Vim 学习路径。你照着这个顺序学,不会乱。
这张图把 Vim 的核心脉络理清了。你从普通模式开始学,掌握移动和编辑,然后学会进入插入模式写内容,最后用命令行模式保存退出。配置和插件是进阶内容,等你用熟了再折腾。
最后说一句:Vim 的学习曲线确实陡,但一旦跨过那个坎,你会发现它是最顺手的编辑器。我用了十年 Vim,到现在每天还在学新技巧。别急,慢慢来。