《Vim实用技巧(第2版)》——2.5 能够重复,就别用次数

简介: 在处理某些特定工作时,使用次数可以使按键次数变得最少,不过并不是非得这样不可。我们需要认真考虑次数与重复各自的优缺点。根据我们的讨论,d2w 和 2dw 是相同的,在执行完两者中的任一个后,可以按 u 键撤销,这样两个被删除的单词又会回来。

本节书摘来自异步社区《Vim实用技巧(第2版)》一书中的第2章,第2.5节,作者:【英】Drew Neil(尼尔)著,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.5 能够重复,就别用次数

在处理某些特定工作时,使用次数可以使按键次数变得最少,不过并不是非得这样不可。我们需要认真考虑次数与重复各自的优缺点。
假设在缓冲区里有如下文字。

Delete more than one word
想把这段文字改为“Delete one word”,也就是说,要像这段文字里所讲的那样删除两个单词。

有几种方式可以达到这一目的,d2w 和 2dw 都可以。使用 d2w,先调用删除命令,然后以 2w 作为动作命令,可以把它解读为“删除两个单词”;然而 2dw 做的相反,这一次,次数作用于删除命令,而动作命令只跨越一个单词,可以把这解读为“做两次删除单词的操作”。抛开语义不讲,无论哪种方法,结果都是相同的。

现在,让我们考虑另外一种方式,即dw.。这可以解读为“删除一个单词,然后重复上次的操作”。

概括一下,我们的3种选择 d2w、2dw 或者 dw. 都是3次按键,不过哪一种最好呢?

根据我们的讨论,d2w 和 2dw 是相同的,在执行完两者中的任一个后,可以按 u 键撤销,这样两个被删除的单词又会回来。或者,我们不是用撤销,而是用 . 命令重复执行它,这就会删除后面的两个单词。

对于 dw. 的情形,按 u 或 . 的结果会有细微的差别。这里的修改是 dw,即删除一个单词。因此,如果想恢复这两个被删除的单词,必须撤销两次,按 uu(或者,如果你愿意,也可以按 2u)。按 . 则只删除后面的一个单词,而不是两个。

现在假设我们原本是想删除3个单词,而不是2个。由于判断出了点差错,我们执行了 d2w 而不是 d3w,那接下来怎么做?我们不能使用 . 命令,因为那会总共删除4个单词。因此,我们或是先撤销而后修正次数(ud3w),或是继续删除下一个单词(dw)。

现在考虑另一种方案,如果我们在第一处地方用的是 dw. 命令,那么只要再多重复一次 . 命令就行了。因为我们最初的修改只是简单的 dw,因此u 命令和 . 命令都具有更细的粒度,每次只作用于一个单词。

现在假设我们想删除7个单词,我们可以运行 d7w,或是 dw......(即 dw 后面跟6次 . 命令)。计算一下按键的次数,哪个命令胜出是很显而易见的。不过你真地确信自己数对了次数吗?

计算次数很是讨厌,因此我宁愿按6次 . 命令,也不愿意只为减少按键的次数,而浪费同样的时间去统计次数。如果我多按了一次 . 命令怎么办?没关系,只要按一次 u 键就可以回退回来。

还记得吗,我们的口诀是(参见技巧4):执行、重复、回退。这里就是在把它付诸行动。

只在必要时使用次数
假设我们想把文字“I have a couple of questions”改为“I have some more questions”,可以用下面的方式做。
screenshot
在此场景中,使用 . 命令的意义不大,我们可以删除一个单词,然后再用 . 命令删除另一个,但随后我们还得切换到插入模式(例如,使用 i 或 cw)。对我来说这么做很不顺手,我反而更愿意用次数。

使用次数的另一个好处是:它保留了一个干净、连贯的撤销历史记录。完成这次修改后,按一下 u 键就可以撤销整个修改,这和技巧8中的讨论是一致的。

对于是用次数风格(d5w)还是用重复风格(dw....)也有同样的争论,因此我的偏好看起来似乎不太一致。对此,你要总结自己的观点,这取决于你怎么看保留干净撤销历史记录的价值,以及你是否觉得用次数令人生厌。

相关文章
|
开发工具 搜索推荐 网络安全
《Vim实用技巧(第2版)》——导读
Vim是高度可配置的,然而定制是一件很个性化的事情,因此我试图避免建议什么应该放进你的vimrc里,什么不应该。相反,本书关注的是Vim编辑器的核心功能。不管你是通过SSH登录远端服务器工作,还是在用本地安装了插件而增添了额外功能的GVim,这些功能都永远在那儿。
1845 0
|
开发工具
《Vim实用技巧(第2版)》——2.6 双剑合璧,天下无敌
如果想用 = 命令自动缩进整个文件,可以执行 gg=G (就是说,先用 gg 跳到文件开头,然后用 =G 自动缩进从光标位置到文件结尾的所有内容)。但是如果安装了textobj-entire插件的话,简单地执行 =ae 就可以了。运行这条命令时光标在哪儿并不重要,因为它总是作用于整个文件。
2493 0
|
开发工具 前端开发
《Vim实用技巧(第2版)》——2.4 用次数做简单的算术运算
本节书摘来自异步社区《Vim实用技巧(第2版)》一书中的第2章,第2.4节,作者:【英】Drew Neil(尼尔)著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1433 0
|
开发工具
《Vim实用技巧(第2版)》——2.3 构造可重复的修改
要想充分利用 . 命令,事先常常需要进行一番周详的考虑。如果你发现自己要在几个地方做同样的小修改,就可以尝试构造你的修改,让它们能够被 . 命令重复执行。要识别出这类机会需要进行一定的实践,不过一旦养成了使修改可重复的习惯,你就会从 Vim 这里得到“奖赏”。
2021 0
|
开发工具
《Vim实用技巧(第2版)》——2.2 把撤销单元切成块
在不区分模式的文本编辑器中,输入一些单词后使用撤销命令,有两种可能。一种是它可能会撤销最后输入的字符;另一种做得更好点,它可能会把字符分成块,使每次撤销操作删除一个单词而不是一个字符。
1472 0
|
开发工具 程序员
《Vim实用技巧(第2版)》——第2章 普通模式 2.1停顿时请移开画笔
就像画家只花一小部分时间涂色一样,程序员也只花一小部分时间编写代码。绝大多数时间用来思考、阅读,以及在代码中穿梭浏览,而且当确实需要修改时,谁说一定要切换到插入模式才行?我们可以重新调整已有代码的格式,复制它们,移动其位置,或是删除它们。在普通模式中,我们有众多的工具可以利用。
1588 0
|
开发工具
《Vim实用技巧(第2版)》——1.6 认识 . 范式
到目前为止,我们介绍了3个简单的编辑任务。尽管每个问题都不一样,不过我们都找到了用 . 命令解决该问题的方法。在本节,我们将比较这些方案,并找出它们共有的模式——一个我称之为“ . 范式”的最佳编辑模式。
1338 0
|
开发工具 Go 机器学习/深度学习
《Vim实用技巧(第2版)》——1.5 查找并手动替换
当光标位于“content”的开头时,就可以着手修改它。这包括两步操作:首先要删除单词“content”,然后输入替代的单词。cw 命令会删除从光标位置到单词结尾间的字符,并进入插入模式,接下来就可以输入单词“copy”了。
1347 0
|
开发工具
《Vim实用技巧(第2版)》——1.4 执行、重复、回退
在面对重复性工作时,我们需要让移动动作和修改都能够重复,这样就可以达到最佳编辑模式。Vim对此的支持是:它会记住我们的操作,并使最常用的操作触手可及,所以可以很方便地重复执行它们。本节将介绍 Vim 可以重复执行的每个操作,并学习如何回退这些命令。
2123 0
|
JavaScript 开发工具 前端开发
《Vim实用技巧(第2版)》——1.3 以退为进
先后退一步,然后前进三步,这是个奇怪的小花招,看起来可能不够直接。但这样做最大的好处是:我们可以用 . 命令重复这一修改。我们所要做的只是把光标移到下一个 + 号处,然后用 . 命令重复这一操作即可。
1668 0