Emacs相当于Vim的yy10p?

Sar*_*ard 22 emacs shortcuts editor

如何在Emacs中轻松复制10行?我找不到复制线快捷方式或功能.我可以使用C-aC-spcC-eM-w来费力地复制该行,但是如何将其粘贴多次呢?

在我去写自己的功能之前的任何想法.

ljs*_*ljs 19

您可以使用键盘宏: -

Ca Ck Cx(Cy Cj Cx)Cu 9 Cx e

说明:-

  • 加:开始行
  • Ck:杀死线
  • Cx(:开始录制键盘宏
  • Cy:Yank遇难
  • Cj:转到下一行
  • Cx):停止录制键盘宏
  • Cu 9:重复9次
  • Cx e:执行键盘宏

  • 请注意,自从Emacs 22.1发布以来,您实际上可以使用`<CS-backspace>`运行`kill-whole-line`并且相当于vi中的`dd`.因此,每当你发现自己在做"Ca Ck Ck"时,你只需要`<CS-backspace>`. (3认同)

Shr*_*saR 11

复制:

如果您经常使用行,则可能希望在未选择任何区域时使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)))))
Run Code Online (Sandbox Code Playgroud)

然后你可以用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 :)


Bax*_*imo 9

您可能知道这一点,但对于许多命令,"Cu 10"前缀将起到作用.不幸的是,对于Cy yank命令,"Cu"被重新定义为"返回杀死戒指中的许多物品,然后猛拉该物品".

我以为您可以使用Cu前缀命令使用copy-to-register和insert-register命令,但显然这也不起作用.

同样Cx z,"重复最后一个命令"似乎对Cu免疫.

另一个想法是使用M-:得到一个Eval提示并输入一些elisp.我认为像(dotimes '10'猛拉)可能会做到这一点,但它似乎没有.

因此看起来在宏上使用Cu可能确实是最好的,你可以做的不是编写自己的小函数.

如果我投票,我会投票支持kronoz.

  • (dotimes '10(yank))似乎对我有用 (6认同)

Pau*_*aul 7

在此示例中,您不需要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那么短,但非常接近.:)