如何设置Emacs键绑定来设置变量?

时间:2008-12-18 19:42:20

标签: emacs lisp

我在Emacs中有一个名为my-var的变量,每当我按下C-v时我都想设置它。我怎么做?我试过这个:

(defun set-my-var (value)
  "set my var"
  (interactive)
  (defvar my-var value
    "a variable of mine")
)

(global-set-key "\C-v" 'set-my-var)

但那失败了:

call-interactively: Wrong number of arguments: (lambda (value) "set my var"
(interactive) (defvar my-var value "a variable of mine")), 0

3 个答案:

答案 0 :(得分:4)

实际上,defvar不会做你认为它做的事情:它只会改变以前没有值的值。这是一个使用CTRL-u参数执行所需内容的块:

(defun set-my-var (value)
  "Revised version by Charlie Martin"
  (interactive "p")
  (setq my-var value))

这是一个例子,来自*scratch*缓冲区的代码

(defun set-my-var (value)
  "Revised version by Charlie Martin"
  (interactive "p")
  (setq my-var value)) ; do ^J to evaluate the defun form, showing return in the buffer.
set-my-var

(global-set-key "\C-v" 'set-my-var)
set-my-var
 ;Another ^J

;;; Now, what's the value after ^U^V?
my-var
4
;;; Now ^U 8 ^V
my-var
8
;;; now ^U^U^V
my-var
16

答案 1 :(得分:3)

这是在论证中。查看我刚刚发布的关于(interactive)的文字。当你将set-my-var绑定到一个键时,它正在寻找一个参数,但是由于你使用了(interactive),所以没有任何参数。您想要的类似于(interactive "p")来获取CTRL-u参数,或者(interactive "M")来获取字符串。

阅读"Using Interactive."

上的EMACS Lisp手册

答案 2 :(得分:2)

其他一些提示:

  • CTRL-v是标准绑定和 非常使用(scroll-up)。 找到你会更好 一些没有用过的东西。 通常,那些将被添加到 CTRL-c键盘映射。
  • 不要养成治疗的习惯 parens好像是C大括号。 它更好(更习惯)LISP 我们其他人可能的风格 阅读你的代码,只关闭所有 最后的parens。