我怎么可以复制一线路的10倍很容易地在Emacs?我不能找到复制线的快捷方式或功能。我可以使用C-交流-均衡eM-w费力地复制,但我怎么能那么粘贴到不止一次?

任何思想在我走之前写我自己的职能。

有帮助吗?

解决方案

复制:

如果你经常工作带线,可能要作复制(kill-ring-save)和切割(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)))))

然后你就可以复制线只有M-w。

粘贴:

往往一前缀的论点只是执行一项行动多次,所以你期望的C-u10C-y工作,但在这种情况下,C-y使用其参数的意思是这件杀戒"美国佬"(粘贴)。唯一的解决办法我能想到的是什么kronoz说:记录的宏C-x(C-y C-x),然后让的论点C-u去 kmacro-end-and-call-macro 而不是(这是C-u9C-x电子或甚至只是C-9C-x电子或M-9C-x e)。

另一种方式:你可以还呆在 M-x viper-mode 和使用yy10p:)

其他提示

你可以使用键盘的宏:-

C-C-k C-x(C-y C-j C-x)C-u9C-x e

说明:-

  • C-a:去开始的线路
  • C-k:杀行
  • C-x(:开始录音的键盘的宏观
  • C-y:美国人杀了线
  • C-j:移动到下一条线
  • C-x):停止录音的键盘的宏观
  • C-u9:9次重复
  • C-x电子:执行宏键盘

你可能知道这一点,但是对于 很多 命令"C-u10"前缀会做的伎俩。不幸的是为C-y抽出命令,"C-u"被重新定义为意指"回去,许多项目在环杀,并把这项目"。

我想你可能可以使用复制的登记和入册的命令与C-u前缀的命令,但显然这并不能工作。

还C-x z,"重复最后的命令"似乎是免疫C-u.

另一个想法就是使用M-:得到一个Eval迅速和类型中位的工作基本是在封闭的情况下进行.我想喜欢的东西(dotimes'10'美国)可能做到这一点,但它似乎没有。

因此它看起来像使用C-u宏观上可能确实是最好的你可以做简短的写你自己的小功能。

我未经表决,我投票给kronoz的答案。

你不需要这两个C-x)和C-x电子,在这个例子。

你可以只是重复的论点直到C-x)。此停止的记录和重复的宏观,在一个步骤。或者你可以跳过C-x)和直到C-x电子,因为C-x电子将结束的记录之前做的重复。

这种方式的选择取决于你怎么喜欢你的重复计数的工作。C-x)你说多少重复你想在总(以10在这种情况下)。C-x电子你需要说多少重复是离开(即9).


C-C-k C-k也会杀死后newline,所以你不必把它放回去你自己以后。它的速度比使用该标记,而且不需要你改变任何变量。

甚至更好的(除非你在一个终端),则可以使用C-S-退格*要杀死整个线,不管你在哪里。

[*如果你使用X窗,确保型转变( 备选案文)或者你可以终止你的话!]

说到终端、M-9是一个不错的选择如果你找到你不能类型C-9.


在Emacs22和更高,可通过默认F3开始一个宏观和F4端重复宏。你只是打F3开始记录,打F4当你完成,并打F4再次重复宏。(F4还需要一个参数。)


把这个放在一起,以获得10拷贝的现行:

  • C-S-Backspace:杀了这个线
  • F3:开始的宏观
  • C-y:美国佬线
  • C-1的C-0F4:作出这10个美国佬

不是很短y10个p,但很接近。:)

这里有一个功能我从OS/2港口Emacs。(是的,我一直在使用Emacs的一段时间。)

;; Author: Eberhard Mattes <mattes@azu.informatik.uni-stuttgart.de>
(defun emx-dup-line (arg)
  "Duplicate current line.
Set mark to the beginning of the new line.
With argument, do this that many times."
  (interactive "*p")
  (setq last-command 'identity) ; Don't append to kill ring
  (let ((s (point)))
    (beginning-of-line)
    (let ((b (point)))
      (forward-line)
      (if (not (eq (preceding-char) ?\n)) (insert ?\n))
      (copy-region-as-kill b (point))
    (while (> arg 0)
      (yank)
      (setq arg (1- arg)))
    (goto-char s))))

我有结F9d:

(global-set-key [f9 ?d]    'emx-dup-line)

然后我会用C-u10F9d来重复的一个线路的10倍。

只有这样,我知道要重复任何命令是使用"重复的说法"功能键盘的宏。

C-C-空间下的M-w C-x(C-y C-x)C-9C-x e

  • C-a:去开始的线路
  • C空:设置标记
  • 下:去开始的下线
  • M-w:复制区域
  • C-x(:启动键盘的宏观
  • C-y:把复制线
  • C-x):结束键盘的宏观
  • C-9C-x电子:执行键盘的宏九倍。

这是种微弱的比vim。但仅仅是因为vim是惊人的高效在这样的事情。

如果你是真正地渴望的模式vi-喜欢相互作用,可以使用一项六仿真模式,例如毒蛇模式。检查在该部分"模拟"的在线emacs手册。

你会想杀人的行:C-C-k,然后C-y或?

我不知道的一个直接的当量(C-y10次是最好的,我知道),但是你可能感兴趣的毒蛇,这是一个vi模拟包emacs。它的标准的一部分emacs的分布。

根据Baxissimo的答案,我defuned这样的:

(defun yank-n-times (arg)
  "yank prefix-arg number of times. Not safe in any way."
  (interactive "*p")
  (dotimes 'arg (yank)))

集到一些关键,呼吁它与前缀参数,和您去。

编辑 (还修改了交互式电话上面要小糟糕)

或者,这是一个版本,可以取代美国佬-pop:

(defun yank-n-times (&optional arg)
  "yank prefix-arg number of times. Call yank-pop if last command was yank."
  (interactive "*p")
  (if (or (string= last-command "yank")
      (string= last-command "yank-pop"))
      (yank-pop arg)
    (if (> arg 1)
    (dotimes 'arg (yank))
      (message "Previous arg was not a yank, and called without a prefix."))))

消息是一种谎言,但是你不应该叫它没有一个前缀的大于1,无论如何,如此。

不知道,如果这是一个很好的想法,但我更换我的这个,我去看看怎么去。

你可以抽出一条线(或区域)的十次少键击:

  • 标记线(或区域)
  • 美国人所选择的文本的10倍:

C-w C-x ( C-y C-1 C-0 C-x )

或者,使用F3和F4功能键的开始和结束的键盘的宏:

C-w F3 C-y C-1 C-0 F4

你获得该线与C-k,你做下一个命令发生十次与C-u10,然后你糊的行与C-y.非常简单的。

如果你总是想要C-k做全线,可以设置杀死整个线。没有更多的摆弄与C-C-e。

有很多你能做的花环杀、寄存器和宏我鼓励你学他们,但是唬弄行十次没有被困难或奇怪。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top