2011-04-20 40 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. 
相關問題