Tip 5 手动查找和替换
下面每一行中都有 content
这个单词
1 |
|
如果我们想把所有的 content
替换成 copy
, 那么可以很简单的想到替换命令.
1 |
|
但是有时候我们并不想全局替换掉.
懒惰点:不做输入的查找
你也许已经猜到.
是我最喜欢的单键Vim
命令.第二喜欢的是 *
,它可以搜索处于光标下面的单词.
1 |
|
首先将光标置于 content
上面,然后用*
命令去查找它,这时候将发生两个事情:
光标将跳转到下个匹配处(即下个
content
单词)所有出现匹配项的地方将高亮显示 (如果没有,使用
:set hls
.
上面两件事情发生之后,我们就可以使用 n
命令跳转到下一个.这时候,使用 *nn
可以循环所有匹配,然后光标转到我们开始进行搜索的地方
让更改变得可重复
当我们的光标置于 content
的开始位置的时候,我们准备去更改它.这包含两个步骤:
删除单词
content
输入修改的内容.
cw
删除到单词结尾命令,并且进入插入模式.
然后我们输入 copy
这个单词. Vim 将记录我们的键盘点击,直到我们离开插入模式,所以, cwcopy<Esc>
将会被记录为一个单个命令.通过使用.
就可以重复上面的操作.
Tip6 Dot公式
在 Tip2中,我们试着将每个句子后面加;
最后,我们通过 j.
进行重复操作.
在 Tip3中,我们将每个+
前后添加空格. 最后,我们通过 ;.
进行重复操作
在 Tip5中,我们将 content
替换成 copy
,最后,我们通过 n.
进行重复操作.
理想的状态: 一个按键负责移动,一个按键负责执行操作.
在上面所有的操作中 . 重复最后的更改.这不是他们全部的共同点,我们都还用了一个键去移动光标.这已经是一个不能再好的情况了.我们在将来的编辑中,可以反复看到这个编辑模式.为了方便,我们把这个模式成为 Dot公式 (Dot Formula)
Tip7 拿开你的笔刷
Normal Mode
(命令模式) 可以类比为一个画家,把笔刷离开画布.这时候,他可以休息,可以构思.同理,程序员也可以在 Normal Mode
中进行思考,组织自己的思路.当我们要改变的时候,也不用非得进入插入模式.在 Normal Mode
中,我们可以格式化我们的代码,复制,或者移动他们.
Tip8 强化你的撤销
在其他编辑器中,通过在输入一些东西之后进行撤销,可以撤销我们最后输入的单词或者字符.然后在 Vim 中,我们设置可以调整撤销命令的粒度.
u
这个命令可以触发撤销命令.它可以撤销包括Normal,Visual还有 Command-Line 模式的更改.当然,也包括在插入模式下的文本输入或者删除.所以我们可以说: i{ 插入一些更改}< Esc>
构成了一个改变. 然后一次u
就可以撤销这个改变.
另外,插入模式中,如果使用了上下左右箭头,那么就相当于在 NormalMode下使用了 hjkl
.区别就是我们不用离开插入模式,但是这些操作,会被记录到点公式 (Dot Fomula)中.
Tip9 创建可重复的改变
vim将重复操作进行了优化,为了利用这个特性.我们需要留心怎么创建可重复的改变
在 Vim 中,做一件事通常有很多方式.但是衡量”好”的方式的机制就是:更少的键盘敲击.
假设我们的光标在 h
这个字母上,我们想要删除单词 nigh
1 |
|
1. 向后删除
1 |
|
2. 向前删除
1 |
|
3. 删除整个单词
上面两个解决方案都牵涉到了一些准备工作,例如移动.其实,利用aw
命令可以更精准高效的完成我们的需求
1 |
|
4. 哪一个是最可重复的
上面我们使用了三种方式进行删除一个单词.每种方式中,我们都是按了三个键,那么那种方式是更好的呢?
记住, Vim 优化了重复.那么检验好坏的标准就是重复.下面使用dot 命令来检验三种方式,通过测试发现:
第一种方式:
.
等价于x
(db
是改变操作.x
也是改变操作)第二种方式:
.
等价于dw
(b
是纯移动,dw
是改变操作)第三种方式:
.
等价于daw
(daw
是改变操作)
看起来2
3
都是挺有用的,但是有个细节 2
删除一个单词,但是不会删除对应的空格,表象上来看就是不会移动光标到下个单词上,那么这时候, .
这个命令就没什么意义. 3
会把要删除的单词附带空格删除,同时光标停留在 is
的结尾.那么.
这个操作就能继续删除一个单词. (我强烈建议自己动手试试看)