2012-09-28 33 views
2

我正在尝试为行重复编写我的函数。我必须保持光标位置。这是.emacs文件中的代码: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) 

而且这个工作。

回答

1

global-set-key需要两个参数KEYCOMMANDCOMMAND不是一个关键序列,它是一个函数(通常它是一个符号,命名交互可调用函数,说文档)。当函数被调用时,您可能不希望更改C-d的行为,您想要将该函数绑定到该键。

+0

但当时我有这个早些时候:(全球设置键 “\ CD” “\ CA \ CK \ CK \赛扬\赛扬\的Cp \ CP” )除了重新定位部分,这工作得很好。 – sudeepdino008

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) 
+0

谢谢。但我的目标是实现我自己的行重复以使用elisp。 – sudeepdino008

+1

@ I'llsudeepdino008看看你的代码。现在看看这个代码。看看有什么不同?试图找出原因。那么你会“得到与elisp一起去”。 –