Есть ли функция Emacs, которая копирует всю строку, включая новую строку? - PullRequest
1 голос
/ 20 апреля 2011

Я не могу написать функцию emacs, кто-нибудь может мне помочь?

Ответы [ 4 ]

4 голосов
/ 20 апреля 2011

Да, есть. Этот код заимствован из этой записи в блоге :

(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)))))
2 голосов
/ 20 апреля 2011

Есть несколько способов скопировать строку:

  1. Обычный способ: C-a C-SPC C-n M-w

  2. С помощью мыши: трижды щелкните по строке, введите M-w

  3. Установить (или настроить) переменную kill-whole-line на t, затем скопировать, убив и отменив: C-a C-k C -_

Я не считаю эту операцию достаточно распространенной, чтобы назначать ей комбинацию клавиш, но если вы это сделаете, то написать функцию просто:

(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 голосов
/ 25 августа 2012
;; 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.
0 голосов
/ 04 октября 2011

C-a C-k C-k C-y
или
C-a C-u 1 C-k C-y

Найдено через
C-H K C-K
и
C-h f kill-TAB

(defun copy-line ()
  (interactive)
  (beginning-of-line)
  (kill-line 1)
  (yank))
...