为什么我的宏停在文件末尾

问题描述 投票:0回答:1

我编写了一个宏,在行尾添加

;
并将光标移动到下一行。我重复运行此宏以将
;
添加到缓冲区的每一行。

这是我的意见

qaA;ESCjq
1000@a

这是我的问题。我的文件只有 5 行,我重复宏 1000 次。它应该在最后一行的末尾添加很多

;
,但 vim 所做的只是停在文件末尾。我想知道vim中的哪个机制导致了这个。

我相信这是一个简单的问题,但我只是找不到任何官方文档来证明这一点。所以我希望有一些文档能够正式描述这个机制。

vim
1个回答
0
投票

我能找到的最好的就是

:help @
的这一部分:

寄存器像映射一样执行

:help map-error
结合:

请注意,当遇到错误时(导致错误消息或蜂鸣声) 映射的其余部分不执行。这是 Vi 兼容的。

这种推理的弱点在于,计数在

@
中的应用方式与映射中不同。

创建一个附加分号的映射并调用它 1000 次 将添加 1000 个分号。创建向下然后添加分号(例如 :nnoremap <f2> jA;<Esc>

)的映射将在缓冲区的最后一行失败。如果您将 
1000@x
 视为“创建一个包含 
x
 中的命令 1000 次的映射”,则该解释有效。

还有两件事:

您真的要添加那么多分号吗?拥有一款能够满足您

想要需求的软件,无论是否有文档记录,这不是很好吗?

为了完整起见,添加分号的方法是使用以下两个命令之一:

:%normal A; :%s/$/;/
    
© www.soinside.com 2019 - 2024. All rights reserved.