Vim 速查
模式是 Vim 的一切:记住当前处于什么模式,就永远不会迷路。先跑一遍
vimtutor(终端里直接敲),再回来看这份速查效率最高。
模式切换
i/a/o(进入插入)
┌──────────────────►┐
Normal(默认) Insert
│ ◄─────── Esc ─────────┘
│
├─ v / V / Ctrl-v ──► Visual(字符 / 行 / 块选)
├─ : ──────────────► 命令行(:w :q :s ...)
└─ / ? ────────────► 搜索
任何时刻按 Esc 回到 Normal。迷路了就多按几下 Esc。
移动
| 按键 | 作用 | 按键 | 作用 |
|---|---|---|---|
h j k l |
左 下 上 右 | w / b / e |
下一词头 / 上一词头 / 词尾 |
0 / ^ / $ |
行首 / 首个非空 / 行尾 | gg / G / 数字G |
文件头 / 文件尾 / 第 n 行 |
f<char> / t<char> |
行内找字符(停在/停在它前面) | ; , |
重复 / 反向重复 |
% |
跳到匹配的括号 | Ctrl-d / Ctrl-u |
半屏翻页 |
* / # |
向下 / 向上搜当前词 | { } |
上 / 下一段落 |
gd / gD |
跳到局部 / 全局定义 | Ctrl-o / Ctrl-i |
跳转回退 / 前进 |
数字 × 动作 = 重复:3w 往前三个词、5j 下移五行、d2w 删两个词。
编辑:动词 + 名词
Normal 模式命令的语感是 操作符 + 范围:
| 操作符 | 含义 | 常用组合 | 效果 |
|---|---|---|---|
d |
删除 | dd / dw / d$ / diw |
删行 / 删词 / 删到行尾 / 删整个词 |
c |
删除并进入插入 | cc / ciw / ci" |
改行 / 改词 / 改引号内内容 |
y |
复制(yank) | yy / yw / yiw |
复制行 / 词 |
p / P |
粘贴到后 / 前 | xp 交换两个字符 |
|
x |
删字符 | r<char> |
替换单个字符 |
u / Ctrl-r |
撤销 / 重做 | ||
. |
重复上一条修改 | Vim 高效的核心,能省一半按键 | |
>> / << |
缩进 / 反缩进 | 配 Visual 模式批量缩进 |
i(光标前) a(光标后) I(行首) A(行尾) o(下方新行) O(上方新行) 进插入模式。
ci" / ci( / ci{ / ci[ 这类 text object 是效率分水岭:光标在字符串任意位置,ci" 直接改整个引号内内容,di( 删整个括号内。
搜索与替换
/pattern 向下搜索(? 向上);n / N 下一个 / 上一个
:noh 清除搜索高亮
* 搜光标下的词(配 n 跳转)
:s/old/new/ 当前行替换第一处
:s/old/new/g 当前行全部替换
:%s/old/new/g 全文替换
:%s/old/new/gc 全文替换,逐处确认(y/n/a/q)
:'<,'>s/old/new/g 只替换选区(Visual 选中后按 : 自动出现 '<,'>)
:g/pattern/d 删除所有匹配行;:g!/pattern/d 留匹配行
窗口、标签页、buffer
:vs 文件 左右分屏打开;:sp 上下分屏
Ctrl-w h/j/k/l 在窗口间移动;Ctrl-w w 循环
Ctrl-w = 均分窗口大小
:only 关闭其他窗口
:tabnew 文件 新标签页;gt / gT 切换标签
:ls 列出 buffer;:b 数字/名字 跳转
:e 文件 打开文件;:Ex 文件树浏览
marks 与宏
ma 标记 a;`a 跳到标记处,'a 跳到标记行行首
`. 上次修改的位置;`` 上次跳转前的位置
qa 开始录制宏到寄存器 a ... q 结束
@a 回放;5@a 回放 5 次;@@ 重复上一次回放
批量改 N 行:先在第一行录好,:normal! @a 应用到选中行
.vimrc 最小配置
" 基础体验
set nocompatible
syntax on
set number " 行号
set relativenumber " 相对行号(5j 这种动作一目了然)
set hlsearch incsearch " 高亮搜索 + 边输边搜
set ignorecase smartcase " 小写忽略大小写,含大写则精确
set showcmd ruler
" 缩进
set tabstop=4 shiftwidth=4
set expandtab " Tab 展开为空格(Go 等项目除外)
set autoindent smartindent
" 其他
set backspace=indent,eol,start
set scrolloff=5 " 光标上下留 5 行视野
set mouse=a " 允许鼠标
set encoding=utf-8
" 恢复光标位置
autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | execute 'normal! g`"' | endif
插件生态(想深入再折腾):vim-plug 管理器 + fzf(模糊搜索文件)、NERDTree / netrw(文件树)、coc.nvim 或原生 LSP(补全跳转)、vim-commentary(注释)。模组的现代发行版可看 Neovim + lazy.nvim。
练习建议
vimtutor完整过一遍(30 分钟,中文版:vimtutor zh);- 强迫自己一周内用 Vim 写完所有代码(VS Code 里装 Vim 插件也算);
- 每次发现手在重复劳动,去查"有没有更好的动作"——
ciw、f;、.、宏就是一步一步攒出来的; - 日常速查回这页就够了;深入读
:help user-manual或《Practical Vim》。