像打咏春一样使用Vim

“我学功夫,从15岁开始,每天挥刀500下,这个数管住了我。从今天起,我以你为约束。”
--电影《师傅》
看过甄子丹演的《叶问》三部曲,陈国坤演的《李小龙传奇》最喜欢廖凡演的《师傅》(台词精炼,耐人寻味)。咏春拳给我的印象是招数简单实用,攻防兼备,常以速度制胜。这跟 Vim 的哲学有异曲同工之妙。甚至觉得有时候用 Vim 编程感觉像练功,没有 IDE 那样繁多的提示和功能,纯粹的写代码。这里总结点儿我平时使用 Vim 的窍门,让你用起 Vim 来像咏春一样快(快速移动光标),狠(疯狂码字),准(准确删除/修改)
- Part1:手指不要轻易离开主键区
- Part2:让光标跟上眼睛
- Part3:Vim 语熟于心
- Part4:常用 Vim 语实战(会持续更新)
Part1:手指不要轻易离开主健区

咏春:中門論 ─人體中門最弱,是攻擊目標,也是重點守護的地方。
要提高使用Vim的效率,在保证功能的情况下,尽量缩小打字的范围,守护我们的“中门”(主键区)。这里有几点建议:
- 不用 方向键,用
hjkl
(入门基本素养) - 不用
Esc
,用control + [
- 不用
Back Space
,用x/D/c/C
等 - 把键盘上的
Cap Lock
换成Control
- 常用
ctrl + p
或ctrl + n
补全输入 - 常用
.
(英文句号)重复上一个命令 - 盲打(进阶必备素养)
- 用
set nu
和set rnu
让行数行距尽收眼底:
Part2:让光标跟上眼睛
效果 | 命令 |
---|---|
光标置顶 | gg |
光标至底 | G |
光标至页顶 | ctrl + h |
光标至页底 | ctrl + m |
光标至页中 | ctrl + l |
光标至句首 | ctrl + ^ |
光标至句尾 | ctrl + $ |
往下翻页 | ctrl + d |
往上翻页 | ctrl + p |

Part3:Vim 语熟于心
Vim 语法结构:[数字]+ 动词 + 介词 + 名词/符号
- 数字表示重复命令的次数,省略则表示只执行一次。
- 语法结构必须严格遵循:[数字] + 动词 + 介词 + 名词/符号的顺序使用,否则可能没有意义。
- 语法是死的,语言是活的,结合具体的情况使用即可使事半功倍。
动词
效果 | 命令 |
---|---|
删除(delete): | d |
修改(change): | c |
复制(yank): | y |
选取(visual select): | v |
- 替换(replace)命令是
r
不支持 Vim 语法结构,修改错别责的时候常用,格式是r
+ 正确的字母/字符
介词
效果 | 命令 |
---|---|
在…之内(inner) | i |
在…周围(around) | a |
到…位置前(to) | t |
到…位置上(forward) | f |
- 注意:
i
/a
/f
在当动词使用的时候分别表示 插入(insert),增补(append),查询(find),然而t
只有作介词(表示 to) 和符号(表示 tag) 的时候才有意义,请不要混淆了。
名词
效果 | 命令 |
---|---|
一个单词(word) | w |
一个句子(sentence) | s |
一个段落(paragraph) | p |
常用符号
效果 | 命令 |
---|---|
逗号 | , |
句号 | . |
分号 | ; |
一个标签(tag) | t |
圆括号 | ( 或 ) |
方括号 | [ 或 ] |
花括号 | { 或 } |
Part4:常用 Vim 语实战(会持续更新)
1. 单词/段落
效果 | 命令 | 记忆窍门 |
---|---|---|
删除一个单词 | daw |
delete a word |
替换一个单词 | caw |
change a word |
选取一个单词 | vaw |
visual-select a word |
删除一个段落 | dap |
delete a paragraph |
替换一个段落 | cap |
change a paragraph |
选取一个段落 | vap |
visual-select a paragraph |
- delete a word

change a word
visual-select a word
delete a paragraph
change a paragraph
6.visual-select a paragraph

想一想:如果把命令中的 a
换成 i
会有什么不同呢?
2. 程序员常用 Vim 语
命令 | 效果 | 记忆窍门 |
---|---|---|
清除括号里的内容 | di(/di[/di{ 或 di)/di]/di} |
delete inside ()/[]/{} |
清除整个括号 | da(/da[/da{ 或 da)/da]/da} |
delete around ()/[]/{} |
清除标签里面的内容 | dit |
delete in tag |
清除整个标签的内容 | dat |
delete all tag |
delete inner bracket/tag
delete a bracket/tag
想一想:如果要替换括号/标签里面的内容或者替换整个括号/标签应该如何做呢?
提速策略
仔细观看上面的实例,你也许会发现,无论在单词/段落/标签的任意一个位置(首部,中间,结尾)以上命令均可使用。这意味着你可以放心的使用Part1 中的第六条建议:常用.
(英文句号)重复执行命令。接下来,你便可以用点点点,来删删删,改改改,有没有像打咏春拳一样的快感?
3. 句子
命令 | 效果 |
---|---|
向后清除到字母/符号的内容 | df字母/符号 |
向前清除到字母/符号的内容 | dF字母/符号 |
向前清除到字母/符号之前的内容 | dT字母/符号 |
向后清除到字母/符号之前的内容 | dt字母/符号 |
想一想:如果把命令中的 d
替换成 v
或者 c
会有什么效果呢?
当然,在修改句子的时候就不能在任意的地方用 .
(英文句号)来重复修改内容了。但是我们依然可以使用 .
来快速到达指定的位置。
希望这篇文章对于喜欢 Vim 的朋友有帮助,这篇文章只包括了 Vim 从初级到进阶的一部分技巧,大家若有任何意见或建议请多多指教。都看到这儿了,给大家发个福利《Vim 实用技巧》高清英文版PDF(中文版我没找着,不嫌弃就收了顺便练练英文吧)感谢大家听我唠叨哈哈,里面有很多实用有趣的实例。下载不了的话可以简信我。
P.S. 特别感谢:
和我一起用 Vim 玩耍的小伙伴 Seven
song4 和他的这篇一起来说Vim语
Drew Neil 的《Vim 实用技巧》