2011-04-20 24 views
1

我不能写emacs功能,有人可以帮我吗?是否有一个Emacs函数可以复制整行,包括换行符?

+0

你的意思是一个elisp的函数,返回当前行,或意在交互调用的函数哪一行放在当前的YANK缓冲区上(如Mw)? – Lindydancer 2011-04-20 09:08:26

+0

如果你四处寻找'nuke-line',你可能会在互联网上找到一个defun的地方。我的工作是.emacs,而不是在家。但它削减了包括换行符在内的当前行,而不是复制它。该行仍然可以通过'C-y'访问。 – vpit3833 2011-04-20 10:59:28

回答

4

是的,有。 This code is borrowed from this blog entry

(defadvice kill-ring-save (before slick-copy activate compile) 
    "When called interactively with no active region, copy a single line instead." 
    (interactive 
    (if mark-active (list (region-beginning) (region-end)) 
     (message "Copied line") 
     (list (line-beginning-position) 
     (line-beginning-position 2))))) 

(defadvice kill-region (before slick-cut 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))))) 
+0

我认为下面的代码可以帮助我。 (defun定义复制线() (交互) (移动-开头的行1) (杀线) (抽出) ) – danot 2011-04-20 09:57:25

+1

尝试上面的代码。 Srsly。 'M-w'复制整行(除非你标记了一个区域,然后复制该区域)。 'C-w'杀死它。 – monotux 2011-04-20 13:03:45

2

有几种方法可以复制一个行:

  1. 的常用方法:钙C-SPC道道分子量

  2. 使用鼠标:在三击线,型号Mw

  3. Set(or cust 钙CK C-_

我不觉得这是一个共同的足够的操作,我愿意为它分配一个按键组合:omize)变量kill-whole-linet,然后通过杀戮和毁灭复制,但如果你这样做,然后可以很容易地编写一个函数:

(defun kill-ring-save-line() 
    "Save the line containing point to the kill ring." 
    (interactive) 
    (kill-ring-save (line-beginning-position) 
        (line-beginning-position 2))) 
+0

我通常使用比C-C-SPC C-n M-w短一个按键的C-k C-k C-y,并且使用较少的手指杂技。 – Wilduck 2011-04-26 03:10:22

+0

只有当点已经在线的开始时才起作用。 – 2011-04-26 10:45:02

0

钙CK CK赛扬

钙铜1 CK赛扬

通过
章ķCK

章˚F杀-TAB发现

(defun copy-line() 
    (interactive) 
    (beginning-of-line) 
    (kill-line 1) 
    (yank)) 
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. 
相关问题