我在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
答案 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")
来获取字符串。
答案 2 :(得分:2)
其他一些提示:
scroll-up
)。
找到你会更好
一些没有用过的东西。
通常,那些将被添加到
CTRL-c
键盘映射。