《Vim实用技巧(第2版)》——2.4 用次数做简单的算术运算

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

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

2.4 用次数做简单的算术运算

大多数普通模式命令可以在执行时指定次数,可以利用这个功能来做简单的算术运算。
很多普通模式命令都可以带一个次数前缀,这样Vim就会尝试把该命令执行指定的次数,而不是只执行一次(参见 :h count screenshot)。

<C-a><C-x> 命令分别对数字执行加和减操作。在不带次数执行时,它们会逐个加减,但如果带一个次数前缀,那么可以用它们加减任意整数。例如,如果把光标移到字符5上,执行 10<C-a> 就会把它变成15。

但是如果光标不在数字上会发生什么?文档里说, <C-a> 命令会“把当前光标之上或之后的数值加上 [count]”(参见 :h ctrl-a screenshot)。因此,如果光标不在数字上,那么 <C-a> 命令将在当前行正向查找一个数字,如果找到了,它就径直跳到那里。我们可以利用这一点简化操作。

下面是一段CSS片段。

normal_mode/sprite.css

.blog, .news { background-image: url(/sprite.png); }
.blog { background-position: 0px 0px }

我们要复制最后一行并且对其做两个小改动,即用“news”替换单词“blog”,以及把“0px”改为“-180px”。可以运行 yyp 来复制此行,然后用 cW 来修改第一个单词。但该怎么处理那个数值呢?

一种做法是用 f0 跳到此数字,然后进入插入模式手动修改它的值,即 i-18<Esc>。不过,运行 180<C-x> 则要快得多。由于光标不在要操作的数字上,所以该命令会正向跳到所找到的第一个数字上,从而省去了手动移光标的步骤。让我们看看整个操作过程。
screenshot
在本例中,只复制了一行并做出改动。但是,假设要复制10份,并对后续数字依次减180。如果要切换到插入模式去修改每个数字,每次都得输入不同的内容(-180,然后-360,以此类推)。但是如果用 180<C-x> 命令的话,对后续行也可以采用相同的操作过程。甚至还可以把这组按键操作录制成一个宏(参见第11章),然后根据需要执行多次。

数字的格式

007的后面是什么?不,这不是詹姆斯·邦德的恶作剧,我是在问:如果对007加1,你觉得会得到什么结果。

如果你的答案是008,那么当你尝试对任意以0开头的数字使用 <C-a> 命令时,也许会感到诧异。像在某些编程语言中的约定一样,Vim把以0开头的数字解释为八进制值,而不是十进制。在八进制体系中,007 + 001 = 010,看起来像是十进制中的10,但实际上它是八进制中的8,糊涂了吗?

如果你经常使用八进制,Vim的缺省行为或许会适合你。如果不是这样,那么你可能想把下面这行加入你的vimrc里:

set nrformats=
这会让Vim把所有数字都当成十进制,不管它们是不是以0开头的。

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