如何在Emacs中复制整行?

175

我看到了关于VIM的相同问题,这也是我自己在Emacs中想要知道如何实现的。在ReSharper中,我使用CTRL-D来执行此操作。在Emacs中执行此操作的最少命令数是多少?


2
当然,这是emacs,所以TMTOWTDI - 有22种!(还在不断增加中)http://c2.com/cgi/wiki?ThereIsMoreThanOneWayToDoIt - Tom
34个回答

0
;; http://www.emacswiki.org/emacs/WholeLineOrRegion#toc2
;; cut, copy, yank
(defadvice kill-ring-save (around slick-copy activate)
  "When called interactively with no active region, copy a single line instead."
  (if (or (use-region-p) (not (called-interactively-p)))
      ad-do-it
    (kill-new (buffer-substring (line-beginning-position)
                                (line-beginning-position 2))
              nil '(yank-line))
    (message "Copied line")))
(defadvice kill-region (around slick-copy activate)
  "When called interactively with no active region, kill a single line instead."
  (if (or (use-region-p) (not (called-interactively-p)))
      ad-do-it
    (kill-new (filter-buffer-substring (line-beginning-position)
                                       (line-beginning-position 2) t)
              nil '(yank-line))))
(defun yank-line (string)
  "Insert STRING above the current line."
  (beginning-of-line)
  (unless (= (elt string (1- (length string))) ?\n)
    (save-excursion (insert "\n")))
  (insert string))

(global-set-key (kbd "<f2>") 'kill-region)    ; cut.
(global-set-key (kbd "<f3>") 'kill-ring-save) ; copy.
(global-set-key (kbd "<f4>") 'yank)           ; paste.

将上述elisp添加到您的init.el中,现在您可以剪切/复制整行功能,然后您可以使用F3 F4来复制一行。

0

相较于Chris Conway所选的答案,这种方式更为自然。

(global-set-key "\C-c\C-d" "\C-a\C- \C-n\M-w\C-y\C-p\C-e")

这使您可以通过简单地重复使用 Ctrl-cCtrl-d 快捷键来多次复制一行。


0

最简单的方法是Chris Conway的方法。

C-a C-SPACE C-n M-w C-y

这是 EMACS 强制实施的默认方式。在我看来,最好使用标准方式。我对自定义 EMACS 键绑定一直很谨慎。EMACS 已经足够强大了,我认为我们应该尽力适应它自己的键绑定。

虽然有点冗长,但当您习惯后,您可以快速操作并会发现这很有趣!


4
总的来说,Emacs 并不强制要求做什么 - 它给你带来的巨大优势是可以轻松地 定制 它以适应你自己的需求。当然,在实践中有很多标准方法需要遵循,但如果你正在使用 "默认" 的 Emacs,并且因为认为 "使用标准更好" 而用比必要更难的方式完成某些任务,那么你基本上是在错误地使用它。 - phils

-1

我通常使用:

Ctl-Space(设置标记)
移动到行尾
Ctl-K 删除行
Ctl-Y * 2(粘贴回该行)

可能有更好的方法 :P


你是指:C-a C-SPC C-e M-w RET C-y 吗? - jfs
是的 :) 那就是精确的方式 嘿嘿。 - Arthur Thomas
@作者 Thomas:为什么要杀掉?为什么不只是复制呢? - viam0Zah
Arthur Thomas,那里拼写得很正确!哈哈。Ctl-W也可以。他只是在询问一行代码。哇。 - Arthur Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接