Vim 中的“点”命令
我相信你已经听说过“不要重复自己”的原则。
在软件工程中,这是软件开发的一个原则,其重点在于减少各种重复操作。正如你将在本书中看到的,Vim 提供了许多方法和命令来自动化不同类型的任务,从而避免你重复执行相同的操作。
在避免重复方面,Vim 最强大的命令之一就是.点号(`)命令。
在普通模式下按下按键.将重复执行你最后执行的 Vim 原生命令。
假设你想删除光标前方 5 个单词。如你所知,你可以按下删除5dw键完成操作。然而,有时手动计算单词数量并不方便。
另一种方法是先dw删除一个单词,然后按....四次点号命令。这样,你只需重复执行dw四次点号命令,就能达到同样的效果,而无需计算单词数。
如果你用 dd 命令删除了一行,现在想再删除 4 行,你也可以执行 dd 命令4.而不是按 dd 键....。这样做也是可以的。
理解点命令实际可重复执行的操作非常重要。例如,如果您有如下示例代码:
my $i
my $learn
my $quickly
光标位于第一行。你想;在所有三行末尾添加内容。你可以运行如下命令:A;<Esc>j
• A– 会将光标置于插入模式下的第一行末尾。
• ;– 按下此键即可插入,然后按Esc 键返回普通模式。
• j– 向下移动一行
现在,光标位于第二行。如果您按下回车键试图.在下一行(第二行)重复此更改,则不会生效。您将会看到以下结果:
my $i;
my $learn;
my $quickly
您的光标仍将位于第二行而不是第三行,但;内容将被追加。
由此我们可以得出结论,只有我们最初的命令的这一部分被重复了:A;<Esc>。
那么,为什么会这样呢?
需要注意的是,使用点命令可以重复执行更改缓冲区内容的命令。
修改是指可以用来修改文本的任何命令。在我们的示例中,命令没有重复执行j,光标也没有移动到第三行。
像这样的命令j被称为移动指令(或名词),它们不会影响文本本身。命令j只会移动光标,但不会改变文本内容,因此无法重复使用。
想想你母语的语法:表达动作时用的是动词,而不是名词。Vim 也是如此:名词(或动作)不能影响文本,所以不能用点号命令重复输入。
要查看所有可以影响缓冲区中文本的命令,请查看 :help change.txt
当然,如果您想重复多个更改,或者组合使用不同的动作和更改,您可以轻松地将它们记录到宏中。
你可以从我的书《快速掌握 Vim:从 WTF 到 OMG》的“宏”章节(免费下载)中学习到所有关于宏的知识。
还在读吗?
每周二,我都会向超过 6000 名 Vim 爱好者(即我的《快速掌握 Vim》简讯订阅者)发送超棒的 Vim 使用技巧。欢迎免费订阅。
这篇文章最初发表在我的博客上。
文章来源:https://dev.to/jovica/the-dot-command-in-vim-34k4