(一)vim解决问题的方式

该文集来自于对《Vim实用技巧》的摘抄,如有任何侵权内容,请及时通知我。

内容的编排也是来自于书本的编排,这不是vim的基础教程,对vim基本操作不熟悉的童鞋请先自行修习。

(一)vim解决问题的方式_第1张图片

使用vim编辑文档时,很多情况会是操作的copy,copy,copy。有些繁琐,也有了改进空间。

结识 . 命令

“.” 命令可以让我们重复上次的修改,使修改可重复是关键。

我们需要意识到一点:“上次修改” 可以指很多东西,一次修改的单位可以是字符,整行,甚至是整个文件。

例如:x 会删除光标下的字符,所以 . 也会删除光标下的字符;dd 会删除整行,所以 . 也会删除整行;>G 会增加从当前行到文档末尾的缩进层级,所以 . 是相同作用。

这些都是在普通模式下进行的操作,同时在编辑模式的情况是什么呢?

每次我们进入插入模式时,也会形成一次修改。从进入插入模式的那一刻起(例如,输入 i ) ,直到返回普通模式时为止 (输入 ) , Vim 会记录每一个按键操作。 做出这样一个修改后再用 . 命令的话,它将会重新执行所有这些按键操作。

不要自我重复

想象一个场景,在code的行尾忘加了分号,我们一般的操作为,($a;) 完成了单行的修改,然后其他行可以使用,(j$.)这样总共有3个按键,有没有改进的余地呢?

a 命令在当前光标后添加内容,而 A 命令则在当前行的结尾添加内容。不管光标当前处于什么位置,输入 A 都会进入插入模式,并把光标移到行尾。换句话说 A 把 $a 封装成了一个按键操作。在上面的例子中,我们可以使用(A;)完成首行操作,然后(j.)来操作其他行。

其他符合命令按键:

复合命令 等效的长命令
C c$
s cl
S ^C
I ^i
A $a
o A
O ko

这些复合命令都会从普通模式切换到插入模式,并对 . 操作产生影响。尽量使用复合命令。

以退为进

颇有兵法的味道。
我们的目的是在一个字符前后各添加一个空格:

比如:

var foo = "method("+argument1+","+argument2+")";

为了美观,我们需要在 + 号前后加上空格,我们要怎么操作呢?
首先使用 f+ 来找到指定字符的位置,并把光标移动到那里,然后使用 (s + )来完成单个位置的操作(这就是以进为退, 删除了 + ,做成新的的操作,方便后面的使用), 然后我们可以多次使用 ;. 来完成剩下的更改。

; 命令会重复查找上次 f 命令所查找的字符。

有的时候需要委婉的完成自己的目的。

执行 重复 回退

在执行了可重复的操作,知道如何回退。
可重复的操作及如何回退:

目的 操作 重复 回退
做出一个修改 {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

查找并手动替换

全局替换可以使用:%s/content/copy/g
选定的行替换:0,20s/content/copy/g
但是,我们只有在一些情况下才需要做修改呢,比如有的copy我想保留下来,一个比较便利的方式就是找到需要修改的词,逐个去替换。
可以使用/content 或将光标移动到content上使用*或#来找到所有单词(使用高亮),然后,cwcopy,完成替换操作,这样就可以使用n或N,跳到下一个或上一个单词处,使用 . 来做逐个替换。

结识 . 范式

首先,使修改操作可重复,然后快速移动到下一个需要修改的位置,使用 . 命令完成修改。这就 . 范式。
最理想的模式就是:一键移动,一键执行。简单有效。

** 总结 **

最关键的一点就是使修改可重复,使用复合命令,使用前进和回退操作模式。

你可能感兴趣的:((一)vim解决问题的方式)