的.emacs全球设置键,调用交互功能与参数
在我的.emacs我有以下功能调换线路的.emacs全球设置键,调用交互功能与参数
(defun move-line (n)
"Move the current line up or down by N lines."
(interactive "p")
(let ((col (current-column))
start
end)
(beginning-of-line)
(setq start (point))
(end-of-line)
(forward-char)
(setq end (point))
(let ((line-text (delete-and-extract-region start end)))
(forward-line n)
(insert line-text)
;; restore point to original column in moved line
(forward-line -1)
(forward-char col))))
我一个密钥绑定像这样
(global-set-key (kbd "M-<down>") 'move-line)
;; this is the same as M-x global-set-key <return>
不过,我想结合M-了移动线(-1),但我不能似乎能够正确地做到这一点:
;; M-- M-1 M-x global-set-key <return>
我如何使用global-set-key来定义上述调用move-line-1?
问了一个问题后,我没有几分钟就通过复制+粘贴代码找出了问题。但我不知道它是如何工作的。
(global-set-key (kbd "M-<up>") (lambda() (interactive) (move-line -1)))
您创建了一个异议函数(`lambda`),它只是您的函数的一个包装函数,其参数为`-1`。如果您想获得更多信息,请在互联网或emacs信息中搜索`lambda`。 – danielpoe 2009-06-23 07:17:06
global-set-key只接受2个参数:键序列和你想绑定的命令。所以
(global-set-key (kbd "M-<down>") 'move-line)
工作正常。但是如果你想使用带参数的移动线,你需要将它包装在一个匿名(aka lamba)函数中,以便它将自身呈现给global-set-key作为一个值。
您可能想要查看“转置线”内置函数。
当我遇到同样的问题时,我发现了这个问题,但我最终以另一种方式解决了这个问题。
(global-set-key (kbd "M-<down>") 'move-line)
(global-set-key (kbd "M-<up>") (kbd "C-u -1 M-<down>"))
绝对不是一个完美的解决方案,因为M-<down>
中可以重新分配和C-u -1
可能不会作出它的意义,但由于它只是我的本地初始化文件,它应该是没有问题的。
此外,这种显而易见的方式只适用于您想要颠倒的键盘命令。
仅供参考:emacs中内置了转置线路功能。尝试快捷方式C-x C-t。 – polyglot 2009-06-23 04:05:46