如何在Emacs中轻松复制10行?我找不到复制线快捷方式或功能.我可以使用C-aC-spcC-eM-w来费力地复制该行,但是如何将其粘贴多次呢?
在我去写自己的功能之前的任何想法.
您可以使用键盘宏: -
Ca Ck Cx(Cy Cj Cx)Cu 9 Cx e
说明:-
加:开始行
Ck:杀死线
Cx(:开始录制键盘宏
Cy:Yank遇难
Cj:转到下一行
Cx):停止录制键盘宏
Cu 9:重复9次
Cx e:执行键盘宏
复制:
如果您经常使用行,则可能希望在未选择任何区域时使copy(kill-ring-save
)和cut(kill-region
)在行上工作:
(defadvice kill-ring-save (before slickcopy activate compile) "When called interactively with no active region, copy a single line instead." (interactive (if mark-active (list (region-beginning) (region-end)) (list (line-beginning-position) (line-beginning-position 2))))) (defadvice kill-region (before slickcut activate compile) "When called interactively with no active region, kill a single line instead." (interactive (if mark-active (list (region-beginning) (region-end)) (list (line-beginning-position) (line-beginning-position 2)))))
然后你可以用Mw复制该行.
粘贴:
前缀参数通常只执行一次多次动作,因此你可以期待Cu 10 Cy工作,但在这种情况下,Cy使用它的参数来表示杀死环的哪个元素"猛拉"(粘贴).我能想到的唯一解决方案是kronoz所说的:用Cx(Cy Cx)记录一个宏,然后让Cu的参数kmacro-end-and-call-macro
改为(那是Cu 9 Cx e,甚至只是C-9 Cx e或M-9 Cx) E).
另一种方式:你也可以留下来M-x viper-mode
使用yy10p :)
您可能知道这一点,但对于许多命令,"Cu 10"前缀将起到作用.不幸的是,对于Cy yank命令,"Cu"被重新定义为"返回杀死戒指中的许多物品,然后猛拉该物品".
我以为您可以使用Cu前缀命令使用copy-to-register和insert-register命令,但显然这也不起作用.
同样Cx z,"重复最后一个命令"似乎对Cu免疫.
另一个想法是使用M-:得到一个Eval提示并输入一些elisp.我认为像(dotimes '10'猛拉)可能会做到这一点,但它似乎没有.
因此看起来在宏上使用Cu可能确实是最好的,你可以做的不是编写自己的小函数.
如果我投票,我会投票支持kronoz.
在此示例中,您不需要Cx和Cx e.
您可以直接将重复参数赋予Cx).这将停止录制并一步重复宏.或者您可以跳过Cx并直接进入Cx e,因为Cx e将在重复之前结束录制.
选择哪种方式取决于您喜欢重复计数的工作方式.对于Cx),你说你想要多少次重复(在这种情况下为10).对于Cx e,您需要说明还剩多少次重复(即9).
Ca Ck Ck也会杀死尾随的换行符,所以你以后不必自己回来.它比使用标记更快,并且不需要您更改任何变量.
更好(除非你在终端),你可以使用CS-Backspace*来杀死整条线,无论你在哪里.
[*如果您使用的是X窗口,请确保键入shift(而不是 alt),否则您可以终止会话!]
说到终端,如果您发现无法输入C-9,M-9是一个不错的选择.
在Emacs 22及更高版本中,默认情况下F3启动宏,F4结束/重复宏.您只需按F3开始录制,完成后按F4,然后再次按F4重复播放宏.(F4也有争议.)
把这一切放在一起,得到当前行的10个副本:
CS-Backspace:杀掉这一行
F3:启动宏
Cy:猛拉线
C-1 C-0 F4:让那10个猛拉
不像yy 10 p那么短,但非常接近.:)