将命令序列捆绑在一起以重复(。)


10

考虑:

apple
pear

将光标放在第一行上,键入Yp,生成:

apple
apple
pear

将光标放在pear行上,然后键入.以重复上一个命令。这仅重复p(而不是组合Yp),产生:

apple
apple
pear
apple

我想知道一种方法来.重复最后N条命令。喜欢的东西2.重复组合Yp,以产生:

apple
apple
pear
pear

Ofc无效-重复p两次。但是这个想法是“重复最后两个命令的顺序 ”。

我知道我可以- q记录命令序列并使用来重复它们@@,但是这种解决方案并不理想,因为它需要您一直在进行规划,而实际上,您通常并不知道需要重复一些操作直到之后你已经做到了。

有什么方法可以实现我想要的吗?

安慰奖:如果以上都不可行,是否有办法重复上一次的宏播放?例如,如果我键入@@要播放的最后一个宏,我希望随后的内容.等同于@@再次键入-而不是再次键入(例如,如果的结果@@取决于您所在的行)


对于问题的第一部分,我不知道有解决方案,但是对于第二部分,您可以尝试以下映射:nno <silent> @@ @@:sil! call repeat#set('@@', v:count1)<CR>但是,要使其正常工作,您需要安装此插件:github.com/tpope/vim-repeat
user9433424

Answers:


4

Vim只存储最后执行的命令,只有被重复执行.;我认为,其他任何事情都将难以处理。

如果您需要将Yp组合作为单个实体重复,则必须使它成为一个命令。蒂姆·波普(Tim Pope)的repeat.vim插件可轻松实现自定义映射。当然,如果为映射选择一个短键[sequence],则可以快速重新输入(而不是.),甚至可以避免repeat.vim集成。

顺便说一句,我的LineJuggler插件提供了一个]d复制当前行的映射,并且它确实支持通过repeat.vim进行重复。


2

在中Yp,唯一要重复的“更改”是p。我知道更改.正常模式下行为的唯一方法是添加ycpoptions选项:

set cpoptions+=y

这样您就可以重复上一次拉动和最后一次更改。

但这并不会改变您的问题,因为Yp仍然有两个命令:紧随其后的更改。

我认为没有一些平凡的脚本,您将无法获得想要的东西。您是否看过vim.org的脚本部分


1

我经常使用它map来达到这种效果。例如:

map <F12> Yp

然后F12重复按将执行YpYpYp等操作。如果要在每次粘贴后移至下一行,请映射一个键Yp+


1

RepeatLast插件(通过我们自己的@joeytwiddle)的显着特点是通过将您所做的所有事情记录为宏的邪恶方法提供了此功能。

它提供了许多新的映射,但是,如果我正确地阅读了文档,要执行您描述的编辑,可以使用命令序列(假设您使用的是默认<leader>设置\):

  • Yp拉动并粘贴/粘贴线apple
  • j向下移动一行,使光标现在位于该pear行上,
  • \D忘记j命令,
  • 2\.重复两个命令,Y然后p

的确是邪恶的!但我赞赏这个野心。
约拿(Jonah)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.