发布于 2026-01-06 2 阅读
0

Vim 中的“点”命令

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