我正在尝试编写用于行重复的函数。我必须保持光标位置。这是.emacs文件中的代码:
(defun line-duplicate
"line duplication."
(setq position (point)) ;Store the original position of cursor
(global-set-key "\C-d" "\C-a\C-k\C-k\C-y\C-y")
(goto-char position) ;move the cursor to original position
)
(line-duplicate)
然而,出现了一些错误。这是什么错误?
修改
刚刚发现了命令执行功能:
(defun line-duplicate ()
(interactive)
(setq position (point))
(command-execute (kbd "C-a C-k C-k C-y C-y"))
(goto-char position)
)
(global-set-key (kbd "C-d") 'line-duplicate)
这很有效。
答案 0 :(得分:1)
global-set-key
有两个参数KEY
和COMMAND
。 COMMAND
不是一个关键序列,它是一个函数(通常它是一个命名交互式可调用函数的符号,文档说)。您可能不希望在调用函数时更改 C-d 的行为,您希望将该函数绑定到该键。
答案 1 :(得分:1)
我想你想把行副本绑定到C-d
。
您可以编写以下功能:
(defun my:dublicate-line ()
(interactive)
(save-excursion
(let ((begin (line-beginning-position)) (end (line-end-position)))
(move-beginning-of-line 2)
(insert (concat (buffer-substring-no-properties begin end) "\n")))))
(global-set-key (kbd "C-d") 'my:dublicate-line)