
Emacs equivalent of Vim's yy10p?如何在Emacs中轻松地复制一条线10次? 我找不到复制行快捷方式或功能。 我可以使用C-aC-spcC-eM-w费力地复制该行,但是如何才能多次粘贴呢? 在编写自己的函数之前,请先提出任何想法。 您可以为此使用键盘宏:- C-a C-k C-x(C-y C-j C-x)C-u 9 C-x e 说明:-
复制中:
如果您经常使用线条,则可能需要在未选择区域的情况下在线条上进行复制(
然后,您可以仅使用M-w复制该行。 贴上:
通常,前缀参数会执行多次操作,因此您希望C-u 10 C-y可以工作,但是在这种情况下,C-y使用其参数来表示kill-ring的哪个元素"粘贴"。我能想到的唯一解决方案是kronoz所说的:用Cx(Cy Cx)记录一个宏,然后将Cu的参数改为
其它的办法: 您可能知道这一点,但是对于许多命令,使用" C-u 10"前缀即可解决问题。不幸的是,对于C-y猛拉命令," C-u"被重新定义为"返回杀死环中的许多物品,然后猛拉该物品"。 我以为您也许可以将C-U前缀命令与copy-to-register和insert-register命令一起使用,但是显然这也不起作用。 同样,C-x z的"重复最后命令"似乎不受C-u的影响。 另一个想法是使用M-:来获得一个Eval提示符并输入一些elisp。我认为类似(dotimes '10'yank)的方法可能会这样做,但似乎没有。 因此,看起来像在宏上使用C-u确实是您可以写的最好的方法,而无需编写自己的小函数。 如果我投票,我会投票给克朗兹答案。 在此示例中,您不需要C-x和C-x e。 您可以直接将repeat参数直接赋予C-x)。这将停止记录并一步一步重复宏。或者,您可以跳过C-x)并直接转到C-x e,因为C-x e在执行重复操作之前将结束录制。 选择哪种方式取决于您希望重复计数的工作方式。对于C-x),您说总共要重复多少次(本例中为10次)。对于C-x e,您需要说还剩下多少个重复(即9)。 C-a C-k C-k也会杀死结尾的换行符,因此您不必稍后再放回去。它比使用标记更快,并且不需要您更改任何变量。 更好的是(除非您在终端中),无论您位于行中何处,都可以使用C-S-Backspace *杀死整个行。 [*如果您使用的是X窗口,请确保键入shift(而不是alt),否则您可能会终止会话!] 说到终端,如果您发现无法输入C-9,则M-9是一个不错的选择。 在Emacs 22及更高版本中,默认情况下,F3启动一个宏,F4结束/重复一个宏。您只需按F3开始录制,完成后按F4,然后再次按F4以重复宏。 (F4也有一个参数。) 将所有这些放在一起,以获得当前行的10个副本:
并不比y y 10 p短,但是非常接近。 :) 这是我从Emacs的OS / 2端口获得的功能。 (是的,我使用Emacs已有一段时间了。)
我已经绑定到F9 d:
然后,我将使用C-u 10 F9 d将一行重复10次。 我知道重复任意命令的唯一方法是使用键盘宏的"按参数重复"功能。 C-a C-空间向下M-w C-x(C-y C-x)C-9 C-x e
与vim相比,这有点弱。但这仅仅是因为vim在这种情况下非常有效。 如果您确实希望进行类似于模式的vi交互,则可以使用一种vi仿真模式,例如viper模式。签入在线emacs手册的"仿真"部分。 您可以通过减少击键次数将一条线(或一个区域)拉十次:
或者,使用F3和F4功能键开始和结束键盘宏:
根据Baxissimo的回答,我对此表示怀疑:
将其设置为某个键,使用前缀参数调用它,然后就可以使用了。 编辑(还修改了上面的交互式调用,以减少麻烦) 或者,这是一个可以代替yank-pop的版本:
该消息有点是谎言,但是无论如何您都应该在没有大于1的前缀的情况下调用它。 不确定这是否是个好主意,但我将其替换为M-y,我将看看情况如何。 我不知道直接等效(C-y是我所知道的最好的10倍),但是您可能对Viper感兴趣,Viper是emacs的vi仿真包。它是标准emacs发行版的一部分。 您将要杀死这条线:C-a C-k,然后C-y或? 使用C-k获得该行,使用C-u 10使下一个命令发生十次,然后使用C-y粘贴该行。很简单 如果您始终希望C-k做整行,可以将kill-whole-line设置为t。不再摆弄C-a或C-e。 花式杀手环,寄存器和宏可以做很多事情,我鼓励您学习它们,但是拉一条线十次不必太困难也不奇怪。 |