很多程序员止步于Vim的“存活”阶段——能编辑、能保存、能退出就满足了。但Vim真正的威力在于这些将日常操作压缩到几次按键的技巧中。今天分享的这些进阶技巧,是区分Vim使用者和Vim艺术家的关键。
一、理解Vim的效率哲学:少即是多
在深入技巧前,先理解Vim的设计哲学:减少重复、减少模式切换、减少移动距离。
Vim大师的编辑流程像流水线:
- 观察代码结构
- 构思编辑语句
- 执行组合命令
- 用.命令重复
普通编辑器需要几十秒的操作,Vim可能只需3-5次按键。
二、精准移动:让光标飞起来
2.1 行内精确跳跃
vim
fx " 跳到下一个字符x的位置
tx " 跳到字符x的前一个位置
3fx " 跳到第三个出现的字符x
; " 重复上一次f/t查找(向前)
, " 重复上一次f/t查找(向后)
实战场景:function(param1, param2, param3) 中,光标在开头,想删除第一个逗号后的空格:
- 普通方式:按住→键移动15次,按x
- Vim方式:
f,s(找到第一个逗号,跳下一个字符,删除)
2.2 基于语义的移动
Vim
w/W " 向前移动一个单词/大字词(按空格分隔)
b/B " 向后移动一个单词/大字词
e/E " 移动到单词末尾
% " 在匹配的括号间跳转 () {} []
提示:大写命令(W/B/E)将标点视为单词分隔符,在处理代码时更实用。
2.3 搜索导航
Vim
/pattern " 向前搜索
?pattern " 向后搜索
n " 下一个匹配
N " 上一个匹配
* " 搜索当前光标下的单词
三、编辑组合技:像写句子一样编辑代码
3.1 动词+名词的经典组合
记住这个公式:[数字] + 操作符 + 移动命令
|
命令 |
含义 |
使用场景 |
|
|
删除2个单词 |
快速清理参数 |
|
|
修改下面3行 |
批量修改连续行 |
|
|
复制整个段落 |
复制函数块 |
|
|
删除直到左括号 |
清理函数调用内的参数 |
3.2 文本对象操作:编辑的"语法感知"
这是Vim最强大的特性之一——基于代码结构编辑:
vim
ciw " 修改当前单词 (change inner word)
ci" " 修改引号内的内容
ci( " 修改括号内的内容
cit " 修改HTML/XML标签内的内容
di[ " 删除中括号内的内容
ya} " 复制花括号块(包括花括号)
实战场景:修改函数参数
javascript
// 光标在param1上
function example(param1, param2, param3) {
// 输入 ci( → 直接删除括号内所有内容并进入插入模式
// 输入新参数 → arg1, arg2
// 按ESC完成
}
四、可视化模式:批量操作的利器
4.1 三种可视化模式
vim
v " 字符可视化模式(常用)
V " 行可视化模式
Ctrl+v " 块可视化模式(列操作,程序员最爱)
4.2 块操作实战:多行同时编辑
场景:给多行代码添加注释
python
def func1():
return 1
def func2():
return 2
def func3():
return 3
操作步骤:
- 光标移动到第一行行首
- Ctrl+v 进入块可视化模式
- 2j 向下选中3行
- I 进入块插入模式
- # 输入注释符
- ESC 等待2秒,所有选中行都会添加#
同样方法可以:
- 批量缩进:选中后按>或<
- 批量修改:选中后按c修改,输入新内容,按ESC同时应用到所有行
- 批量删除列:选中后按d
五、寄存器与宏:自动化重复工作
5.1 理解Vim的剪贴板:寄存器
Vim有多个寄存器,用"指定:
vim
"ayy " 复制当前行到寄存器a
"ap " 粘贴寄存器a的内容
"+y " 复制到系统剪贴板
"+p " 从系统剪贴板粘贴
:reg " 查看所有寄存器内容
5.2 宏录制:批量处理神器
场景:处理格式混乱的数据
text
name: John; age: 25; city: NY
name: Jane; age: 30; city: LA
name: Bob; age: 35; city: CH
目标:转换为JSON格式
步骤:
- 光标定位到第一行开头
- qa 开始录制宏到寄存器a
- 执行操作:
- ^ 到行首
- i{ "name": " 插入
- f; 跳到分号
- s", "age": 替换分号为内容
- f; 跳到下一个分号
- s", "city": " 替换
- A" } 在行尾添加
- j 跳到下一行
- q 停止录制
- 2@a 对下面2行执行宏
5.3 宏的进阶技巧
vim
@@ " 重复上一次执行的宏
:let @a='...' " 直接编辑宏的内容
qa{操作}q " 正常录制
@a " 执行宏
u " 撤销
@a " 再次执行(调试宏)
六、窗口与标签页:多文件工作流
6.1 高效分割窗口
vim
:sp [file] " 水平分割
:vsp [file] " 垂直分割
Ctrl+w s " 等价于:sp
Ctrl+w v " 等价于:vsp
Ctrl+w 方向键 " 切换窗口
Ctrl+w = " 等分所有窗口
6.2 标签页管理
vim
:tabnew [file] " 新建标签页
gt / gT " 下一个/上一个标签页
2gt " 切换到第2个标签页
:tabclose " 关闭当前标签页
:tabonly " 关闭其他所有标签页
七、搜索与替换的进阶用法
7.1 魔法搜索
vim
/\v(pattern1|pattern2) " 使用very magic模式,减少转义
/\Cpattern " 强制区分大小写
/\cpattern " 强制不区分大小写
7.2 项目内替换
vim
:%s/old/new/g " 全局替换
:%s/old/new/gc " 全局替换,每次确认
:5,12s/old/new/g " 在第5-12行替换
:'<,'>s/old/new/g " 在可视选区替换
高级模式:使用正则表达式
vim
:%s/\v(\w+)\s*=\s*/\1: /g " 将 var = 转为 var:
:%s/^#\s*//g " 删除所有以#开头的注释
八、. 命令:重复的艺术
.命令重复上一次修改,这是Vim最强大的命令之一。
理解什么是"修改":
- iHelloESC - 插入文本
- cwWordESC - 修改单词
- dd - 删除一行
- >} - 缩进到段落结尾
实战技巧:
- 先做一次复杂的编辑
- 用.在多个地方重复
- 配合n查找下一个位置,.应用修改
九、实用配置建议
在~/.vimrc中添加:
vim
" 让.命令在可视选区内也生效
vnoremap . :normal .<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
" 快速保存退出
nnoremap <Leader>w :w<CR>
nnoremap <Leader>q :q<CR>
nnoremap <Leader>x :x<CR>
十、刻意练习计划
第一周:精准移动
- 练习用f/F/t/T代替方向键
- 用w/b/e在单词间移动
- 每天10分钟vimtutor复习
第二周:组合编辑
- 练习c/d/y + 移动命令
- 掌握ciw/ci(/ci"
- 尝试文本对象操作
第三周:可视化模式
- 练习块操作Ctrl+v
- 批量添加/删除注释
- 多行同时编辑
第四周:宏与自动化
- 录制简单宏处理重复任务
- 学习使用寄存器
- 创建自己的代码片段宏
最后:心态调整
- 允许自己变慢:学习期效率会下降,这是投资
- 一次学一点:每周专注1-2个新命令
- 创建记忆钩子:将命令与实际工作场景关联
- 使用Vim everywhere:在VSCode/IDE中使用Vim插件
记住:Vim不是一天学会的,但学会后每天都能节省时间。当你发现自己无意识地用ct"修改字符串时,肌肉记忆已经形成,效率革命悄然完成。

被折叠的 条评论
为什么被折叠?



