题
我怎么可以复制一线路的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。
有很多你能做的花环杀、寄存器和宏我鼓励你学他们,但是唬弄行十次没有被困难或奇怪。