“最后一个命令';Emacs Lisp中的变量
我编写了一个代码段,将前一行复制到点,如果我重复该命令,它将复制更多的前一行。在这里:“最后一个命令';Emacs Lisp中的变量,emacs,elisp,Emacs,Elisp,我编写了一个代码段,将前一行复制到点,如果我重复该命令,它将复制更多的前一行。在这里: (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 (
(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))
我打算猛拉上一行以覆盖当前行。如果我在此处重复我的复制行,我将猛拉上一行的第2行,这是通过测试(If(eq this command last command)完成的
。但它失败了,因为每次执行我在这里的复制行
,它都会将最后一个命令
设置为yank
,而不是我在这里的复制行
。我就是搞不清楚发生了什么。我需要你的帮助。; explicit check for yank
(if (not (eq last-command 'yank))
; setting this command
(setq this-command 'yank)
也许这两者中的一个或两个都是有用的。在调用<代码> YANK < /代码>之后,设置<代码>这个命令也许,
嗨,你应该考虑把你以前的问题的答案标记为“被接受”。所以其他人会更倾向于帮助你。判断答案的正确性是每个人回馈so社区的一部分。谢谢你,你的方法成功了。但实际上,真正让我困惑的是何时显式设置这个命令变量?因为当你从某个命令返回时,Emacs会自动设置它,它eems不适用于我的情况。我在Elisp手册中找到了这一点。`一些命令在执行过程中设置此变量,作为下一步运行的任何命令的标志。特别是,终止文本的函数将此命令设置为终止区域',以便紧跟其后的任何终止命令都知道将终止的文本附加到pr“以前的杀戮.`我认为美国佬就是属于这种类型的。