Я написал фрагмент, чтобы скопировать предыдущую строку в точку, если я повторю команду, она скопирует больше предыдущей строки. Это здесь:
(defun my-copy-line (num)
"copy lines"
(interactive "p")
(save-excursion
(move-end-of-line 1)
(push-mark)
(move-beginning-of-line num)
(kill-ring-save (point) (mark))))
(defvar copy-line-num 1)
(defun my-copy-line-here (num)
"copy line ahead here"
(interactive "p")
(if (eq this-command last-command)
(setq copy-line-num (+ copy-line-num num)) ;count num lines up
(setq copy-line-default 1))
(save-excursion
(save-excursion ;make current line blank
(move-beginning-of-line 1)
(push-mark)
(move-end-of-line 1)
(kill-region (point) (mark))) ;不用kill-line,以免删除空白行
(push-mark)
(previous-line copy-line-num)
(my-copy-line 1)
(exchange-point-and-mark)
(yank))
(setq this-command 'my-copy-line-here))
Я намеревался восстановить предыдущую строку, чтобы переопределить текущую строку. Если я повторю my-copy-line-here
, я восстановлю 2-ю предыдущую строку, это выполняется с помощью теста (if (eq this-command last-command)
. Но это не удалось, потому что каждый раз после выполнения my-copy-line-here
, он устанавливает last-command
на yank
, вместо my-copy-line-here
. Я просто не могу понять, что происходит. Мне нужна ваша помощь.