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

mik*_*ike 2 lisp emacs

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

(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)
Run Code Online (Sandbox Code Playgroud)

但这失败了:

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

Cha*_*tin 5

实际上,defvar 也不会做您认为它会做的事情:它仅在之​​前没有值的情况下更改值。这是一个使用 CTRL-u 参数执行您正在寻找的操作的块:

(defun set-my-var (value)
  "Revised version by Charlie Martin"
  (interactive "p")
  (setq my-var value))
Run Code Online (Sandbox Code Playgroud)

这是一个示例,来自*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
Run Code Online (Sandbox Code Playgroud)