5.8. 技巧10——使用计数来做简单的算术

未匹配的标注

5.8 技巧10——使用计数来做简单的算术

大多数正常模式的命令都可以带有一个数字来执行,利用这个特性可以进行简单的算术运算。

在正常模式可用的许多命令都可以一个数字作为前缀。 Vim 将会尝试按指定的次数执行命令,而不是只执行一次(见 :h count )。

<C-a><C-x> 命令对数字执行加和减。当没有一个计数时,它们只增减1。但如果以一个数字做我前缀,则可以加或者减任何整数。比如将光标放在一个字符 5 上,然后运行 10<C-a> 将会把它修改为15。

但是如果光标不在一个数字上,会发生什么呢?文档说 <C-a> 命令将“对光标下或光标后的数字加上 [count]” (见 :h ctrl-a )。所以如果光标不在一个数字上,那么 <C-a> 命令将在当前行上往前寻找一个数字,如果找到了,就直接跳过去。可以利用这个特性。

下面是一个 CSS 的代码片段:

image-20221123091130922

我们将复制最后一行,然后进行两个小的修改:将单词 “blog” 替换为 “news”,将 “0px” 替换为 “-180px”。 运行 yyp 复制这一行,然后使用 cW 改变第一个单词。但是怎么样去处理那个数字呢?

一个方法是使用 f0 跳到这个数字上,然后进入插入模式,手动改变这个值: i-18<Esc>。但是只运行 180<C-x> 会更快。因为光标一开始不是在一个数字上的,它会直接跳到它找到的第一个数字上。这省去了将手动将光标移动到那里的步骤。看一下这个工作实际的流程。

image-20221123091842591

practical-vim-5.8

在本例中,只是复制了这一行一次,然后进行修改。但假如不得不进行10个修改,对每一个连续的拷贝都从该位置的数字上减去180。如果切换到插入模式去修改每个数字,我们不得不每一次都输入不同的值(-180,然后-360如此等等)。但是通过使用 180<C-x> 命令,工作流对随后的每一行都是一样的。甚至可以将键击记录录制为宏(见11章 )然后按照需要的次数尽可能多地重复它。

宏的演示

practical-vim-5.8-macro

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~