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

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”,可以用下面的方式做。

在此场景中,使用 . 命令的意义不大,我们可以删除一个单词,然后再用 . 命令删除另一个,但随后我们还得切换到插入模式(例如,使用 i 或 cw)。对我来说这么做很不顺手,我反而更愿意用次数。

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

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

时间: 2024-10-21 16:48:37

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

《Vim实用技巧(第2版)》——第1章 Vim解决问题的方式 1.1认识 . 命令

1.1 认识 . 命令 . 命令可以让我们重复上次的修改,它是Vim中最为强大的多面手. Vim文档只是简单地提到 . 命令会"重复上次修改"(参见),这听起来没什么特别,但在这个简单的说明里,我们会发现让Vim区分模式的编辑模型如此高效的核心原因.首先我们要问:"究竟什么是修改?" 要理解 . 命令的强大,我们需要意识到这一点:"上次修改"可以指很多东西,一次修改的单位可以是字符.整行,甚至是整个文件. 我们将使用下面这段文本进行说明. the

《Vim实用技巧(第2版)》——1.2 不要自我重复

1.2 不要自我重复 对于在行尾添加内容这样的常见操作,如添加分号,Vim提供了一个专门的命令,可以把两步操作合并为一步. 假设有如下的JavaScript程序片段. the_vim_way/2_foo_bar.js var foo = 1 var bar = 'a' var foobar = foo + bar 我们想在每行的结尾添加一个分号.要实现这一点,先得把光标移到行尾,然后切换到插入模式进行修改.$命令可以完成移动动作,接着就可以执行 a;<Esc> 完成修改了. 要完成全部修改,也

《Vim实用技巧(第2版)》——1.4 执行、重复、回退

1.4 执行.重复.回退 在面对重复性工作时,我们需要让移动动作和修改都能够重复,这样就可以达到最佳编辑模式.Vim对此的支持是:它会记住我们的操作,并使最常用的操作触手可及,所以可以很方便地重复执行它们.本节将介绍 Vim 可以重复执行的每个操作,并学习如何回退这些命令. 我们已经看到 . 命令会重复上次修改.由于很多操作都被当成一次修改,因此 . 命令已经证明了它的神通广大.但有些命令能以其他的方式重复.例如,@: 可以用来重复任意Ex命令(在技巧31中讨论),或者也可以输入 & (参见技巧

《Vim实用技巧(第2版)》——导读

前言 本书是精通Vim的捷径.尽管它不会手把手教你,不过初学者可以先运行随Vim发布的交互式课程--Vim向导[1]来了解必备的知识.本书则在这一基础之上着重介绍核心概念,并为你讲解地道的用法. Vim是高度可配置的,然而定制是一件很个性化的事情,因此我试图避免建议什么应该放进你的vimrc里,什么不应该.相反,本书关注的是Vim编辑器的核心功能.不管你是通过SSH登录远端服务器工作,还是在用本地安装了插件而增添了额外功能的GVim,这些功能都永远在那儿.精通了Vim的核心功能,你就获得了一个可

《Vim实用技巧(第2版)》——第2章 普通模式 2.1停顿时请移开画笔

第一部分 模式 Vim提供一个区分模式的用户界面,就是说在Vim中按键盘上的任意键所产生的结果可能会不一样,而这取决于当前处于哪种模式(mode).知道当前正处于哪种模式,以及如何在各模式间切换,是极其重要的.在本书的这一部分,我们将学习每种模式的工作方式及其用途. 第2章 普通模式 普通模式是Vim的自然放松状态,如果本章看起来出奇的短,那是因为几乎整本书都在讲如何利用普通模式,而本章只涉及其中的一些核心概念以及通用技巧. 其他文本编辑器大部分时间都处于类似Vim插入模式的状态中,因此对Vim

《Vim实用技巧(第2版)》——2.6 双剑合璧,天下无敌

2.6 双剑合璧,天下无敌 Vim的强大很大程度上源自操作符与动作命令相结合.在本节,我们将看到它是如何工作的,并考虑其寓义.操作符 + 动作命令 = 操作d{motion} 命令可以对一个字符(dl).一个完整单词(daw)或一整个段落(dap)进行操作,它作用的范围由动作命令决定.c{motion}.y{motion} 以及其他一些命令也类似,它们被统称为操作符(operator).可以用 :h operator 来查阅完整的列表,表2-1总结了一些比较常见的操作符. g~.gu 和 gU

《Vim实用技巧(第2版)》——2.3 构造可重复的修改

2.3 构造可重复的修改 Vim对重复操作进行了优化,要利用这一点,必须考虑该如何构造修改.在Vim中,要完成一件事,总是有不止一种方式.在评估哪种方式最好时,最显而易见的指标是效率,即哪种手段需要的按键次数最少(又名VimGolf [1]).然而,在平局时该如何选择获胜者呢? 在下例中,假设光标位于行尾处的字符"h"上,而我们想要删除单词"nigh": normal_mode/the_end.txt The end is nigh反向删除因为光标已经位于单词末尾,

《Vim实用技巧(第2版)》——1.5 查找并手动替换

1.5 查找并手动替换 Vim提供了一个 :substitute 命令专门用于查找替换任务,不过用上面介绍的技术,也可以手动修改第一处地方,然后再一个个地查找替换其他匹配项.. 命令可以把我们从繁重的工作中解放出来,而即将登场的另一个有用的单键命令,则能够让我们方便地在匹配项间跳转.在下面这段文本中,每一行都出现了单词"content". the_vim_way/1_copy_content.txt ...We're waiting for content before the sit

《Vim实用技巧(第2版)》——1.6 认识 . 范式

1.6 认识 . 范式 到目前为止,我们介绍了3个简单的编辑任务.尽管每个问题都不一样,不过我们都找到了用 . 命令解决该问题的方法.在本节,我们将比较这些方案,并找出它们共有的模式--一个我称之为" . 范式"的最佳编辑模式. 回顾前面3个 . 命令编辑任务 在技巧2中,我们想在一系列行的结尾添加分号.我们先用 A;<Esc>修改了第一行,做完这步准备后,就可以使用 . 命令对后续行重复此修改.我们使用了 j 命令在行间移动,要完成剩余的修改,只需简单地按足够多次 j.