emacs的行重复代码

时间:2012-09-28 17:33:01

标签: emacs elisp

我正在尝试编写用于行重复的函数。我必须保持光标位置。这是.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)

这很有效。

2 个答案:

答案 0 :(得分:1)

global-set-key有两个参数KEYCOMMANDCOMMAND不是一个关键序列,它是一个函数(通常它是一个命名交互式可调用函数的符号,文档说)。您可能不希望在调用函数时更改 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)