Vim解决问题的方式
Tip1:Meet the Dot Command
结识 . 命令
. 命令可以重复上次的修改, Vim 中最为强大的多面手。
每次我们进入插入模式时,就会形成一次修改。从进入插入模式的那一刻起,直到返回普通模式, Vim 会记录每一个按键操作。做出这样一个修改后再用 . 命令的话,它将会重新执行所有这些按键操作 。
Tip2: Don’t Repeat Yourself
不要自我重复,不少vim命令是两个甚至多个命令的组合
例如:
行移动:
$: 将光标移动到当前行的行尾
0: 将光标移动到当前行的行首
^: 将光标移动到当前行的第一个非空字符(行首和当前行非空字符不是一个位置)
文本操作:
i: 在当前光标的前面插入字符
a: 在当前光标的后面追加字符
o: 在当前光标的下一行行首插入字符
I: 在一行的开头添加文本
A: 在一行的结尾处添加文本
O: 在光标当前行的上一行插入文本
s: 删除当前光标处的字符并进入到插入模式
S: 删除光标所在处的行,并进入到插入模式
u: 撤销修改
c or C : 表示修改当前行上光标后面的部分. 进入编辑状态.
Tip4 Act, Repeat, Reverse
执行、重复、回退
在面对重复性工作时,我们需要让移动动作和修改都能够重复,这样就可以达到 一个最佳编辑模式。 Vim会记住我们的操作,使最常见的操作触手可及。
. 命令会重复上次修改。@: 可以用来重复任意 Ex 命令,或者我们也可以输入 &来重复上次的:substitute命令(它本身也是一条 Ex 命令)。
当 Vim 让一个操作或移动可以很方便地重复时,它总是会提供某种方式,让我们在不小心做过头时能回退回来。
对 . 命令而言,我们永远可以按 u 键撤销上次的修改。如果在使用 f{char} 命令后,不小心按了太多次 ; 键,就会偏离我们的目标。不过我们可以再按 , 键跳回去,这个命令会反方向查找上次 f{char}所查找的字符。
目的 | 操作 | 重复 | 回退 |
---|---|---|---|
做出一个修改 | {edit} | . | u |
在行内查找下一个指定字符 | f{char}/t{char} | ; | , |
在行内查找上一个指定字符 | F{char}/T{char} | ; | , |
在文档中查找下一个匹配项 | /pattern |
n | N |
在文档中查找上一个匹配项 | ?pattern |
n | N |
执行替换 | :/s/target/replacement | & | u |
执行一系列修改 | qx{changes}q | @x | u |
Tip5 Find and Replace by Hand
查找并手动替换
一般的查找替换命令:%s/content/copy/g
(以copy替换所有行中的content)。
偷懒方法:无需输入就可进行查找。*
命令。
把光标移动到content
单词上,然后用 *
命令对他进行查找。
这会产生两个结果:
- 一是光标会跳到下一个匹配项
- 二是所有出现这个词的地方都会被高亮显示。
执行一次查找后,只需按 n 键就可以跳转到下一个匹配项。使修改可重复
Tip7 Pause with Your Brush Off the Page
停顿时请移开画笔
插入模式专注于文本修改,停顿时进入普通模式。
Tip8 Chunk Your Undos
大步撤销,把撤销单元切成块
u键会撤销最新的修改。一次修改可以是改变文档内文本的任意操作,其中包括在普通模式、可视模式以及命令行模式中触发的命令。
在vim中,可以控制撤销的力度。从进入插入模式开始到返回普通模式,在期间插入或删除任何内容都会被当成一次修改。因此,只要控制对<Esc>
键的使用就可以使撤销作用于句子、段落或单词。
注:在插入模式中,使用<up> <Down> <Left> <Right>
移动光标会重置修改状态,将会产生一个新的撤销块。
Tip9 Compose Repeatable Changes
构造可重复的修改
配合 . 命令选择最优的方案
以删除一个单词为例:
反向删除
dbx
正向删除
bdw
删除整个单词
daw
命令有助于 . 命令发挥最大威力。反向删除 . == x ; 正向删除 . == dx; 删除整个单词 . == daw
Tip11 Don’t Count If You Can Repeat
能重复,就不要用数数
以删除5个单词为例,有两种风格:
- 次数风格(d5w)
- 重复风格(dw….)
对于两种风格的使用存在争议,各有优缺,作者鼓励重复风格,数完估计都操作完了。应用过程中由程序员自由选。
Tip12 Combine and Conquer
动作组合
在Vim 中,操作符 + 动作命令 = 操作
d{motion}
命令可以对一个字符 dl
、一个完整单词 daw
或一整个段落 dap
进行删除操作,它作用的范围由动作命令决定。 c{motion}
、 y{motion}
以及其他一些命令 也类似,它们被统称为操作符operator
g~、 gu 和 gU 命令要用两次按键来调用,我们可以把上述命令中的 g 当做一个 前缀字符,用以改变其后面的按键行为。
学习新的动作命令及操作符,就像是在学习 Vim 的词汇一样。如果掌握了这一简单的语法规则,在词汇量增长时,就能表达更多的想法。用 daw
删除一个单词,然后又学到 gU
命令。它也是个操作符,所以我们可以用 gUaw
把当前单词转换成大写形式。进一步扩充,学会了作用于段落的 ap
动作命令,就会发现我们可以进行两个新的操作:用 dap
删除整个段落,或者用 gUap
把整段文字转换为大写。
常见VIM操作符命令
命令 | 用途 |
---|---|
c | 修改 |
d | 删除 |
y | 复制到寄存器 |
g~ | 反转大小写 |
gu | 转换为小写 |
gU | 转换为大写 |
> | 增加缩进 |
< | 减小缩进 |
= | 自动缩进 |
! | 使用外部程序过滤{motion}所跨越的行 |